我的代码出现问题而不确定它有什么问题。
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,因为它仍然是null。 *注意2,我试图将PHT更改为PST并且它有效。将其更改为JST,它不起作用。
我猜我没有使用正确的格式。不确定我应该使用哪个。
*注3,根据这个question,iOS5和iOS6确实发生了变化,所以我猜这就是iOS5工作的原因。
答案 0 :(得分:1)
根据these docs from Apple,NSDateFormatter
使用Unicode日期格式模式,这是“Unicode技术标准#35”的一部分。此标准正在发展,iOS 5使用version 19,而iOS 6使用version 25。
您可以在“附录J:时区显示名称”(version 19或version 25)中了解时区支持的值。
我不确定为什么之前支持PHT
而不是之前支持PHT
。但总的来说,我能给出的最好建议是避免使用时区缩写。虽然Asia/Manila
是唯一的,但还有许多其他缩写含糊不清。 See the list here。
相反,您应尽可能使用IANA时区名称。 (tr-35标准称之为“黄金地带”)。在您的情况下,它将是VVVV
。 You can find a full list here。我不是Objective C开发人员,因此我不确定您将如何在输入字符串中使用它。您可以尝试[NSTimeZone abbreviationDictionary]
格式说明符,但我不确定它是否直接接受IANA名称。
您可能需要检查PHT = "Asia/Manila"
的结果,如in this answer所示。在该帖子中,它确实显示{{1}},但我假设它在发布之日起是从iOS 5生成的。