每次24小时风格的NSDate小时数?

Fab*_*oni 13 objective-c nsdateformatter ios

我有这个日期格式化程序:

 NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
 [timeFormatter setDateFormat:@"HH:mm"];
Run Code Online (Sandbox Code Playgroud)

如果我用这个:

 NSDate *myDate = [timeFormatter dateFromString:@"13:00"];
Run Code Online (Sandbox Code Playgroud)

它返回:

 "1:00"
Run Code Online (Sandbox Code Playgroud)

这是因为模拟器已关闭24小时.但对于我的应用程序,我真的需要"13:00"而不是"1:00"

--- 编辑1 ---

添加了新代码:

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];
Run Code Online (Sandbox Code Playgroud)

SVD*_*SVD 26

如果要将其强制为12小时或24小时模式,无论用户的24/12小时模式设置如何,都应将日期格式化程序的区域设置设置为en_US_POSIX(12小时),或者说en_GB为24小时模式.

那是,

NSLocale* formatterLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease];
[timeFormatter setLocale:formatterLocale];
Run Code Online (Sandbox Code Playgroud)

还有更多内容:

http://developer.apple.com/iphone/library/qa/qa2010/qa1480.html


Mat*_*ger 9

我最近遇到了同样的问题并且遇到了这个列出所有日期格式模式的文档:http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

通过使用k:mm作为日期格式,我能够完成24次工作:

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"k:mm"];
Run Code Online (Sandbox Code Playgroud)