create a NSDate from a string
Use the following solution
NSString *str = @"3/15/2012 9:15 PM";NSDateFormatter *formatter = [[NSDateFormatter alloc] init];formatter.dateFormat = @"MM/dd/yyyy HH:mm a";NSDate *date = [formatter dateFromString:str];NSLog(@"%@", date);
Edit:Sorry, the format should be as follows:
formatter.dateFormat = @"MM/dd/yyyy hh:mm a";
And the time shown will be GMT time. So if you add/subtract the timezone, it would be 9:15 PM.
Edit: #2
Use as below. You would get exact time too.
NSString *str = @"3/15/2012 9:15 PM";NSDateFormatter *formatter = [[NSDateFormatter alloc] init];formatter.dateFormat = @"MM/dd/yyyy hh:mm a";NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];formatter.timeZone = gmt;NSDate *date = [formatter dateFromString:str];NSLog(@"%@",date);
Your formatter is wrong. According to the NSDateFormatter documentation it should be "MM/dd/yyyy h:mm a". You also probably want to set the locale as stated in the Date Formatting Guideline:
If you're working with fixed-format dates, you should first set the locale of the date formatter to something appropriate for your fixed format. In most cases the best locale to choose is en_US_POSIX, a locale that's specifically designed to yield US English results regardless of both user and system preferences.
Try this:
NSString *str = @"3/15/2012 9:15 AM";NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];NSDateFormatter *formatter = [[NSDateFormatter alloc]init];[formatter setLocale:enUSPOSIXLocale];[formatter setDateFormat:@"MM/dd/yyyy h:mm a"];NSDate *date = [formatter dateFromString:str];NSLog(@"%@",date);
Outputs:
2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000
Hmmm - you've gone wrong for a couple of reasons
- the NSDateFormatter is strict and you have not been.
- you didn't supply str to dateFromString:
NSString* str = @"3/15/2012 9:15 PM";NSDateFormatter* formatter = [[NSDateFormatter alloc]init];[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"];NSDate* date = [formatter dateFromString:str];NSLog(@"%@",date);