【发布时间】:2016-01-18 18:59:53
【问题描述】:
我正在使用 NSDateFormatter 从服务器时间字符串生成 NSDate 对象。我们使用的是 ISO-8601 Extended,下面是我拥有的一种方法,它返回处理转换的日期格式化程序:
+ (NSDateFormatter *) dateFormatter {
NSDateFormatter * dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"];
return dateFormatter;
}
但是,当我使用该代码时,以下断言失败:
NSDateFormatter * dateFormatter = [MyClass dateFormatter];
// "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
_testDateObject = [dateFormatter dateFromString: @"2016-01-18'T'16:31:16.401Z"];
NSParameterAssert(_testDateObject);
我使用的日期格式字符串有什么问题?我已经尝试过它的变体(例如转义文字),但它们都没有产生有效的NSDate。
编辑
我的原始帖子包含我使用的不正确的格式字符串。正如 rmaddy 所指出的,我应该使用yyyy-MM-dd'T'HH:mm:ss.SSSZ,我就是这样。
【问题讨论】:
-
阅读日期格式说明符的文档。阅读您应该在年、日和小数秒中使用的内容..
-
规范 unicode.org/reports/tr35/…
DD是一年中的某一天 (1..356)。YYYY不是日历年。sss是秒。SSS是小数秒。 -
让我困惑的是那里的答案并没有回答这个问题。即使日期字符串为 yyyy-MM-dd'T'HH:mm:ss.SSSZ 或 yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ,我仍然得到 nil 结果
标签: ios objective-c nsdateformatter