Reputation: 1208
I have the following code.
NSDateFormatter *df = ...;
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate * date = [df dateFromString:date_string]; //here is the problem
In 24-hour mode everything is ok. When 12-hour mode is set on device, stringFromDate returns null. Format of date_string is the same all the time, date format too. Why does it happen?
Upvotes: 28
Views: 15878
Reputation: 347
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *locale = [[[NSLocale alloc]
initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
[dateFormat setLocale:locale];
Upvotes: 4
Reputation: 2099
12-hour mode to 24 hour mode:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"];
NSDate *amPmDate = [formatter dateFromString:amPmHourString];
[formatter setDateFormat:@"HH:mm"];
NSString *24HourString = [formatter stringFromDate:amPmDate]];
For 24-hour mode to 12 hour mode just do the opposite
Upvotes: 6
Reputation: 72636
Try to set the locale in this way :
NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = twelveHourLocale;
To force instead to 24 hour, you can use :
NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
Upvotes: 37
Reputation: 21221
In your NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
HH
stands for 24 hour and hh
stands for 12 hour
Upvotes: 56