更新
iOS 7及以上版本,NSDateFormatter在接收到符合以下格式的字符串时会生成一个NSDate对象:
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZ""];
NSLog(@"non–nil date, even honoring the 7–minute–offset in the time–zone on iOS 7: %@",
[formatter dateFromString:@"2011-07-12T18:07:31+02:07"]);
对于iOS 6,答案是不使用NSDateFormatter...
好的,到目前为止我已经阅读了:
- 文档和
- 苹果技术笔记,
- Unicode参考手册的重要部分以及
- 在这里看到了很多关于如何使用
NSDateFormatter
创建一个NSDate
的问题和答案。
我也遇到了 Peter Hosey 的 ISO8601DateFormatter。
研究他的实现,我想知道:
2011-07-12T18:07:31+02:00
转换为NSDate
?如果最后一个冒号缺失,或者在“+”符号之前加上GMT
前缀,那就没问题了,但现实并非如此。我可以通过使用格式@"yyyy'-'MM'-'dd'T'HH':'mm':'ssz':'00"
来使其工作(应用于我的应用程序),但这当然是不正确的,因为它会丢弃时区的分钟信息。我也可以用空字符串替换最后一个冒号,但我认为这也是一种hack方法。那么,有没有什么秘诀可以让NSDateFormatter
接受上述字符串并给出一个有效和正确的NSDate
呢?
顺便说一下:
我在某个地方找到了一个提示,可以使用+[NSDate dateWithNaturalLanguageString:]
来实现我的目标。然而,这只设置了日期,但没有设置时间!(好吧,它确实设置了时间,但只考虑了时区偏移量,而没有考虑HH:mm:ss部分...)
ISO8601DateFormatter
值得考虑,但据报道它非常慢(请参见https://dev59.com/FXI95IYBdhLWcg3wrACw) - matm