iphone - NSDateFormatter dateFromString 和 iPhone 中的 24 小时格式混淆

标签 iphone cocoa-touch time nsdateformatter

我遇到了问题。我收到 12 小时格式的传入时间字符串,并将它们转换为 NSDate 对象。当 iPhone 为 12 小时格式时,没有问题。但当它采用 24 小时格式时,事情就会出错。下面是一些示例代码来演示:

NSString *theTime = @"3:19 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"h:mm a"]; // "3:19 PM"
NSDate *date = [formatter dateFromString:theTime];
NSString *theString = [formatter stringFromDate:date];

在 24 小时模式下,日期 为 1970-01-01 03:19:00,theString 为“3:19” - 错误

在 12 小时模式下,日期 为 1970-01-01 15:19:00,theString 为“3:19 PM” - 右

那么...问题 1:为什么设备的 24 小时设置会覆盖我的日期格式化程序设置?

更重要的是,问题 2:如何正确地将 12 小时制转换为 24 小时制?

我已经有代码来检测手机是否处于 24 小时模式,但除了在字符串中挖掘并将 3 替换为 15 之外,似乎没有一个干净的方法来执行此操作。

最佳答案

不确定您是否仍然需要它,但我遇到了类似的问题,通过设置日期格式化程序的区域设置解决了这个问题。也就是说,如果您想强制其为 12 小时模式,无论用户的 24/12 小时模式设置如何,您都应该将区域设置设置为 en_US_POSIX。

关于iphone - NSDateFormatter dateFromString 和 iPhone 中的 24 小时格式混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173965/

相关文章:

c++ - 输入错误的std::strftime崩溃

javascript - 在 Javascript 中检测特定的 iPhone/iPod touch 型号

objective-c - 呈现模态视图 Controller 隐藏导航栏

iphone - 应用程序在 4.0 上崩溃但在 5.0 上没有

cocoa-touch - Cocoa Touch - 以编程方式添加 UIImageView?

iphone - 在 UILabel 中显示 float

java - 时间:确定系统显示12小时还是24小时

java - 为什么 getStamp() 返回相同的值?

iphone - iOS 上的 HTML 文件选择器

iphone - 无法使标签接收字符串