0

我的代码有问题,不确定它有什么问题。

NSString* dateFormat1 = @"EEE MMM dd HH:mm:ss V yyyy";
NSString* dateString1 = @"Fri Jul 26 00:00:00 PHT 2013";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:dateFormat1];

我对 iOS5.1 的结果:

2013-08-02 11:59:08.459 MySandbox[41502:c07] 2013-07-25 16:00:00 +0000

对于 iOS 6.0

2013-08-02 12:02:37.454 MySandbox[41581:c07] (null)

*注意,我使用 V,而不是 zzz 或 Z,因为它仍然为空。*注 2,我尝试将 PHT 更改为 PST 并且它有效。改成JST,还是不行。

我猜我没有使用正确的格式。不太确定我应该使用哪个。

*注3,根据这个问题,iOS5和iOS6确实发生了变化,所以我想这就是iOS5工作的原因。

4

1 回答 1

1

根据Apple 的这些文档NSDateFormatter使用 Unicode 日期格式模式,这是“Unicode Technical Standard #35”的一部分。该标准正在不断发展,iOS 5 使用版本 19,而 iOS 6 使用版本 25

您可以在“附录 J:时区显示名称”(版本 19版本 25)中了解支持的时区值。

我不完全确定为什么PHT以前支持而不是不支持。但总的来说,我能给出的最好建议是避免使用时区缩写。虽然PHT是独一无二的,但还有许多其他的缩写是模棱两可的。 请参阅此处的列表

相反,您应该尽可能使用 IANA 时区名称。(tr-35 标准将此称为“黄金地带”)。在你的情况下,它会是Asia/Manila. 您可以在此处找到完整列表。我不是 Objective C 开发人员,所以我不确定您将如何在输入字符串中使用它。您可以尝试VVVV格式说明符,但我不确定它是否直接接受 IANA 名称。

您可能想要检查结果,[NSTimeZone abbreviationDictionary]this answer所示。在那篇文章中,它确实显示了PHT = "Asia/Manila",但我假设在发布日期之前这些是从 iOS 5 生成的。

于 2013-08-02T17:23:07.693 回答