iOS的一个特定日期和区域设置配置使NSDateFormatter
有一个非常奇怪的行为。它会忽略我的格式字符串,并将值格式化为0-24范围。
#define DATE_FORMAT "yyyy-MM-dd HH:mm:ssZ"
formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @DATE_FORMAT;
return [formatter stringFromDate:value];
使用自定义格式:"yyyy-MM-dd'T'HH:mm:ssZ"
它会返回这样的日期" 2016-05-26 197 :33:17 PM + 0000"
日期和时间部分之间没有'T'
字符和197小时......
NSDateFormatter
的 "yyyy-MM-dd'T'HH:mm:ss"
无法解析字符串" 2016-05-26T07:32:57"并返回nil
。
这不仅发生在我的自定义格式化程序中。负责description
的内部基金会格式化程序也会遇到此问题:
(lldb) po value.description
2016-05-27 44:20:27 AM +0000
我使用iOS 9.3.2上的特定系统区域设置重现此行为:
"General">"Date & Time">"24-Hour Time" OFF
"General">"Date & Time">"Set Automatically" OFF
"General">"Date & Time">"Time Zone" Moscow
"General">"International">"Language" Русский (Russian)
"General">"International">"Prefferred language order" Русский (Russian), English (U.S.)
"General">"International">"Regional Format" Russia
"General">"International">"Calendar" Gregorian
这是我目前唯一知道的格式化工具。
有人知道如何解决这个问题吗?我会很感激如何分析这个想法,因为我没有自己的想法。
答案 0 :(得分:0)
根据rmaddy和Rob的评论,在这种情况下正确的解决方案是为序列化NSDate对象中涉及的所有格式化程序指定“en_US_POSIX”语言环境。
所以剪贴的帖子应该是:
#define DATE_FORMAT "yyyy-MM-dd HH:mm:ssZ"
formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @DATE_FORMAT;
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
return [formatter stringFromDate:value];
对于Rob发布的具有相同问题链接的每个人都非常有用。 See Technical Q&A 1480.我建议您在将此解决方案应用到代码之前阅读它。