2013-08-02 53 views
0

我遇到了我的代码问题,不确定它有什么问题。尝试使用NSDateFormat时,iOS 6是否支持时区PHT?

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,根据question,iOS5和iOS6确实发生了变化,所以我猜这就是iOS5工作的原因。

回答

1

根据these docs from AppleNSDateFormatter使用Unicode日期格式模式,它们是“Unicode技术标准#35”的一部分。此标准正在发展,iOS 5使用version 19,而iOS 6使用version 25

您可以阅读“附录J:时区显示名称”(version 19version 25)中支持的时区值。

我不确定为什么PHT以前支持,而不是它不支持。但总的来说,我能给出的最好建议是避免使用时区缩写。虽然PHT是独一无二的,但还有许多其他缩写是不明确的。 See the list here

相反,您应该尽可能使用IANA时区名称。 (tr-35标准称这是“黄金区”)。在你的情况下,这将是Asia/ManilaYou can find a full list here。我不是Objective C开发人员,所以我不确定在输入字符串中如何使用它。您可以尝试VVVV格式说明符,但我不确定它是否直接接受IANA名称。

您可能想要检查[NSTimeZone abbreviationDictionary]的结果,如in this answer所示。在那篇文章中,它确实显示了PHT = "Asia/Manila",但是我认为从发布日期开始它们是从iOS 5生成的。