I have this date formatter:
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setDateFormat:@"HH:mm"];
If I use this:
NSDate *myDate = [timeFormatter dateFromString:@"13:00"];
It returns this:
"1:00"
This is because the simulator has switched off 24-hour. But for my app I really need "13:00"
instead of "1:00"
--- EDIT 1 ---
Added new code:
NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setDateFormat:@"HH:mm"];
NSDate *timeForFirstRow = [timeFormatter dateFromString:@"13:00"];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:timeForFirstRow];
NSInteger hour = [dateComponents hour]; //This will be 1 instead of 13
NSInteger minute = [dateComponents minute];
If it helps anyone I have just had an issue where I want to display the time for the user in the way they have set on their device:
The send the time to our API in 24 style:
If you want to force it to 12-hour or 24-hour mode, regardless of the user's 24/12 hour mode setting, you should set the locale of the date formatter to en_US_POSIX (for 12-hour), or, say, en_GB for the 24-hour mode.
That is,
Some more on that here:
http://developer.apple.com/iphone/library/qa/qa2010/qa1480.html
You have to two steps here
here a in the formatter gives am/pm format
I had this same issue recently and came across this document which lists all the date format patterns: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
I was able to get 24-times working just by using k:mm as the date format:
From Apple Documentation, the time formatting strings follow Unicode Technical Standard #35.
As stated in UTR #35, uppercase
HH
gives you 24-hour style time while lowercasehh
gives you 12-hour style time.In short, if you need 24-hour style, use
[timeFormatter setDateFormat:@"HH:mm"];
and if you need 12-hour style, use[timeFormatter setDateFormat:@"hh:mm"];