16

I have a string "2012-09-16 23:59:59 JST" I want to convert this date string into NSDate.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 JST"];
NSLog(@"%@", capturedStartDate);

But it is not working. Its giving null value. Please help..

NiKKi
  • 3,296
  • 3
  • 29
  • 39

3 Answers3

40

When using 24 hour time, the hours specifier needs to be a capital H like this:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

Check here for the correct specifiers : http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

However, you need to set the locale for the date formatter:

// Set the locale as needed in the formatter (this example uses Japanese)
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];

Full working code:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 JST"];
NSLog(@"Captured Date %@", [capturedStartDate description]);

Outputs (In GMT):

Captured Date 2012-09-16 14:59:59 +0000
danielbeard
  • 9,120
  • 3
  • 44
  • 58
  • hey @danielbeard , as u said it will display the time GMT, which will show time difference of 9 hours from the exact date. How to get the exact date from the string.. ??.. – NiKKi Sep 17 '12 at 05:48
  • Dates themselves don't have timezones, but you can get a string representation in a time zone with the `stringFromDate` with the NSDateFormatter set up above. – danielbeard Sep 17 '12 at 05:53
  • See here for more details http://stackoverflow.com/questions/1862905/nsdate-convert-date-to-gmt – danielbeard Sep 17 '12 at 05:55
6
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 GMT-08:00"];
NSLog(@"%@", capturedStartDate);
Mil0R3
  • 3,876
  • 4
  • 33
  • 61
1
NSString *dateString = @"01-02-2010";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

// this is imporant - we set our input date format to match our input string
// if format doesn't match you'll get nil from your string, so be careful

[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate *dateFromString = [[NSDate alloc] init];
 // end
dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release];
AppleDelegate
  • 4,269
  • 1
  • 20
  • 27