iOS set default date to date picker? - objective-c

I've a date picker associated with a text field.Text field has value like this Thursday, November 22nd(string recieved from server call).
Now i want that when i click on text field date picker should sow default date that is displayed in text field.
I guess i've to call [datePicker setDate:date animated:YES]; but problem is that how to convert string Thursday, November 22nd into NSDate?
Thanks in advance.

I assume u would like current year in your date:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"yyyy"];
NSString *yeardate = [dateFormat stringFromDate:[NSDate date]];
NSString *string = #"Thursday, November 22nd";
if ( [string length] > 0)
string = [string substringToIndex:[string length] - 2];
NSString *finalstr = [NSString stringWithFormat:#"%# %#",string,yeardate];
[dateFormat setDateFormat:#"EEEE,MMMM dd yyyy"];
NSDate *date = [dateFormat dateFromString:finalstr];
NSLog(#"%#",date);

You can follow the code snippet below
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"EEEE MMMM d, yyyy"];
NSString *dateStr;
NSDate *date;
date = [NSDate date];
dateStr= [formatter stringFromDate:date];
NSLog(#"%#", dateStr); // -> Tuesday November 6, 2012
dateStr= #"Tuesday November 6, 2012";
date = [formatter dateFromString:dateStr];
NSLog(#"%#",date); // -> 2012-11-05 18:15:00 +0000

Related

Convert a date string of format: "2017-01-03 16:50:00.0" to NSDate

I am getting back a nil string when I use the following:
NSString *formatString = #"yyyy-MM-dd HH:mm:SS.Z";
NSString *dateString = #"2017-01-03 16:50:00.0";
NSDateFormatter *newDateFormatter = [[NSDateFormatter alloc] init];
[newDateFormatter setDateFormat:formatString];
[newDateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:#"UTC"]];
[newDateFormatter setLocale:[NSLocale autoupdatingCurrentLocale]];
NSDate *newDate = [newDateFormatter dateFromString: dateString];
When I log my output, I have a non-nil date newDateFormatter but a nil newDate. What am I doing wrong?
When I removed the .Zfrom the formatter and the .0 from the date it worked fine and the newDate value was 2017-01-03 16:50:00 UTC

How can I parse out date and time separately from a string?

I have a string in the format "3 Dec 2012 1:00PM" and I need to parse out date and time so that I can get "3 Dec 2012" and "1:00PM" in separate NSStrings. How would I do that?
NSString *strInput = #"3 Dec 2012 1:00PM";
static NSString *format = #"dd MMM yyyy hh:mma";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:#"GMT"]];
[dateFormatter setDateFormat:format];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:#"en_US"];
[dateFormatter setLocale:usLocale];
NSDate *date = [dateFormatter dateFromString:strInput];
static NSString *format1 = #"dd MMM yyyy";
[dateFormatter setDateFormat:format1];
NSString *strDatePart1 = [dateFormatter stringFromDate:date]; // gives 3 Dec 2012
static NSString *format2 = #"hh:mma";
[dateFormatter setDateFormat:format2];
NSString *strDatePart2 = [dateFormatter stringFromDate:date]; // gives 1:00PM
The easiest (and fastest) way for this issue is to use it as string without date formatter:
NSArray* components = [fullDateTime componentsSeparatedByString:#" "];
NSString* date = [NSString stringWithFormat:#"%#%#%#", [components objectAtIndex:0], [components objectAtIndex:1], [components objectAtIndex:2]];
NSString* time = [components objectAtIndex:3];
Try this...this may help you..
NSDateFormatter *formatOld = [[NSDateFormatter alloc] init];
[formatOld setDateFormat:#"dd MMM yyyy hh:mma"]; //3 Dec 2012 1:00PM
NSString *oldDate = #"3 Dec 2012 1:00PM";
NSDate *date = [formatOld dateFromString:oldDate];
NSDateFormatter *newFormate = [[NSDateFormatter alloc]init];
[newFormate setDateFormat:#"dd MMM yyyy 'and' hh:mm a"]; //3 Dec 2012" and "1:00PM
NSString *newdate =[newFormate stringFromDate:date];
NSLog(#"%#",newdate);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"dd MMM YYYY"];
NSDate *date = [NSDate date];
//in your case you have a string in place of date. I have made it generalised.
//if you have string
NSString *onlyDate = [dateFormatter stringFromDate:date];
NSLog(#"Date: %# ", onlyDate);
[dateFormatter setDateFormat:#"hh:mm a"];
NSString *onlyTime=[dateFormatter stringFromDate:date];
NSLog(#"Time: %# ", onlyTime);
Outputs
Date: 27 Nov 2012
Time: 02:43 PM
NSString* dateString = #"3 Dec 2012 1:00PM";
- (int) indexOf:(NSString*)source of:(NSString *)text {
NSRange range = [source rangeOfString:text];
if ( range.length > 0 ) {
return range.location;
} else {
return -1;
}
}
-(void)dostrip{
NSString* date = [dateString substringToIndex:[self indexOf:#":"]];
NSLog(#"date: %#", date);
NSString* hour = [dateString substringFromIndex:[self indexOf:#":"]];
NSLog(#"hour: %#", hour);
}
`

NSDate formatting it to include Date and Time

I have two strings.
NSString *dateof = #"Mon May 21";
NSString *timeof = #"01.00 pm from 11.50 pm"; // 01.00 pm is the start time and 11.50 pm is the end time
I need to save these as NSDates, in the format , so that it will be 2012-05-21 13:00:00 +0000.
My approach so far has been:
NSDate *currentTime = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents
*currentDateComps = [cal components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:currentTime];
NSString *startDateStringWithYear = [NSString stringWithFormat:#"%# %d", startDateString, currentDateComps.year];
NSString *endDateStringWithYear = [NSString stringWithFormat:#"%# %d", endDateString, currentDateComps.year];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"EEE MM dd yyyy"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *startDate = [formatter dateFromString:startDateStringWithYear];
NSArray *timeDurationStringWords = [timeof componentsSeparatedByString:#" "];
// Calculate NSDate's for the start time for today:
NSString *startTimeString = [timeDurationStringWords objectAtIndex:0];
currentDateComps.hour = [[startTimeString substringToIndex:2] intValue];
currentDateComps.minute = [[startTimeString substringFromIndex:3] intValue];
if ([[timeDurationStringWords objectAtIndex:1] isEqualToString:#"pm"])
{
currentDateComps.hour += 12;
}
NSDate *startTime = [cal dateFromComponents:currentDateComps];
When I debug the code, startTime prints as 2012-05-29 07:30:00 +0000 which is incorrect (both the day and time are incorrect). I think this is because of the GMT time.
I need the date and time to be 2012-05-21 13:00:00 +0000.
This will do it. As far as the local/GMT, this will give you a NSDate that contains the local time but the debugger will show always show it in GMT. You will need to format it (using a NSDateFormatter) into the format that you want if you are going to show it to the user, in which case it will be in local time.
NSString *dateof = #"Mon May 21";
NSString *timeof = #"01.00 pm from 11.50 pm";
NSDate *today = [NSDate date];
// Start time will be array index 0, end time will be index 1:
NSArray *times = [timeof componentsSeparatedByString:#" from "];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *yearComp = [cal components:NSYearCalendarUnit fromDate:today];
// Append the year and the time to the dateof string to get a string like #"Mon May 21 2012 01.00 pm":
NSString *start = [dateof stringByAppendingFormat:#" %d %#", yearComp.year, [times objectAtIndex:0]];
NSString *end = [dateof stringByAppendingFormat:#" %d %#", yearComp.year, [times objectAtIndex:1]];
// Make a date formatter that recognizes the above date/time:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"EEE MMM dd yyyy hh.mm a"];
// Convert the strings to dates:
NSDate *startDate = [formatter dateFromString:start];
NSDate *endDate = [formatter dateFromString:end];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:#"yyyy-MM-dd 'at' HH:mm"];
NSString *str = [formatter stringFromDate:[NSDate date]];
NSLog(#"str=%#",str);
NSDate *dt = [NSDate date];
dt = [formatter dateFromString:str];
NSLog(#"dt=%#",dt);
Output:
str=2012-05-29 at 10:36
dt=2012-05-29 05:06:00 +0000

NSDateFormatter and /'s

I have a NSString that I want to load into a NSDate. The string looks like: 21/10/2011 5:42:02 PM
What I have written is:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"d/M/yyyy h:mm:ss a"];
NSDate *date = [dateFormat dateFromString:dateString];
The date ends up with a null value.
There is obviously something wrong with the date formatter but I am not sure what.
Any help would be greatly appreciated.
If the string doesn't match the format, then it will return null.
For example, here's an example that matches the format and one that doesn't:
NSString *dateString = #"11/09/2011 12:22:02";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:#"d/M/yyyy h:mm:ss"];
NSDate *date = [dateFormat dateFromString:dateString];
NSLog(#"dateString; %#", date);
NSString *dateString2 = #"2011-11-09 12:22:02 +0000";
NSDate *date2 = [dateFormat2 dateFromString:dateString2];
NSLog(#"dateString; %#", date2);
This outputs:
2011-11-09 07:27:54.342 Craplet[45608:707] dateString; 2011-09-11 05:22:02 +0000
2011-11-09 07:27:54.343 Craplet[45608:707] dateString; (null)

NSDateFormatter with RSS pubDate

I have some problems with converting a rss pubdate string into a NSDate object.
<pubDate>Fri, 09 Sep 2011 15:26:08 +0200</pubDate>
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, d MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:currentDate];
NSLog(#"DateObject : '%#'", date);
[dateFormatter release];
I always get
[44157:10d03] DateObject : '(null)'
You'll need:
dd instead of d, since the day is zero-padded
ZZ instead of Z, since it doesn't include the timezone abbreviated name
More info: http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns
When I run this:
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *str = #"Fri, 09 Sep 2011 15:26:08 +0200";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"DateObject : %#", date);
[dateFormatter release];
[pool drain];
return 0;
}
I get this:
EmptyFoundation[19926:407] DateObject : 2011-09-09 13:26:08 +0000
First you could try the following code:
NSString *str = #"Mon, 19 Oct 2015 14:27:28 +0800";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"DateObject : %#", date);
However, If your DateObject is still null , your locale is not correctly located "en_US_POSIX" format. You need change your locale.
NSString *str = #"Mon, 19 Oct 2015 14:27:28 +0800";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:#"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:#"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
NSDate *date = [dateFormatter dateFromString:str];
NSLog(#"DateObject : %#", date);
The result is:
DateObject : 2015-10-19 06:27:28 +0000
Use :
NSArray *array=[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
to split the pubDate by whitespaces and newline and then get every element you want to show by using the indexes of the array.
I use this code to format Wordpress RSS feed dates:
+ (NSDate *)parseWordpressDate:(NSString *)dataWp {
NSArray *array=[dataWp componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//Tue, 04 Mar 2014 11:00:36 +0000
//day = index 1, month = 2, year = 3
NSString *yyear = [array objectAtIndex:3];
NSString *mmonth = [array objectAtIndex:2];
NSString *dday = [array objectAtIndex:1];
NSDateFormatter *dateFormatterGMTAware = [[NSDateFormatter alloc] init];
[dateFormatterGMTAware setDateFormat:#"yyyy-MMM-dd"];
NSString *dateString = [NSString stringWithFormat:#"%#-%#-%#",yyear,mmonth,dday];
NSDate *data = [dateFormatterGMTAware dateFromString:dateString];
return data;
}