更新
从 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……</p>
好的,到目前为止,我已阅读
- 文档和_
- 苹果的技术说明,
- Unicode 参考的重要部分和
- 这里有很多问题和答案
关于如何使用NSDateFormatter
以创建NSDate
字符串。
我也偶然发现了 Peter Hosey 的ISO8601DateFormatter。
看着他的实现,我想知道:
有没有一种既正确又理智的方法可以将这样的字符串2011-07-12T18:07:31+02:00
放入 中NSDate
?
- 如果最后一个冒号丢失,那也没有问题。
- 如果有
GMT
前缀“+”号是没有问题的,但是...... - 事实并非如此。
我可以破解它来为我的应用程序工作(使用 format @"yyyy'-'MM'-'dd'T'HH':'mm':'ssz':'00"
),但这当然是不正确的,因为它会丢弃时区的分钟信息。
我也可以用空字符串替换最后一个冒号,但我也认为这是一个 hack。
那么,是否有一些秘方可以NSDateFormatter
从上面取出那个字符串并给我一个有效和正确的NSDate
?
在旁边:
我在某个地方找到了提示,可以+[NSDate dateWithNaturalLanguageString:]
用来实现我的目标。这——然而——只设置日期,而不是时间!(好吧,它确实设置了时间,但只考虑了时区偏移,而不是 HH:mm:ss 部分......)