NSDateFormatter关闭了一个小时

Jam*_*nes 5 iphone objective-c nsdateformatter ipad ios

我正在尝试从RSS提要格式化日期:

星期一,2012年2月27日10:33:00 EDT(来自RSS提要的格式)

至:

星期一,2012年2月27日上午10:33

这是我在代码中所做的事情:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EE, d MM yyyy HH:mm:ss zzz"];  

NSDate *date = [dateFormat dateFromString:@"Mon, 27 Feb 2012 10:33:00 EDT"];

[dateFormat setDateFormat:@"EE, d MMM yyyy hh:mm a"];

formatedDateLabel.text = [dateFormat stringFromDate:date];

[dateFormat release];
Run Code Online (Sandbox Code Playgroud)

然而,这始终输出:

星期一,2012年2月27日上午9:33

请注意,我的设备设置为EST.我已经尝试调整日期格式化程序以匹配EDT,但这似乎没有任何区别.

关于我做错什么的任何想法?

yuj*_*uji 2

你没有做错任何事。发生这种情况的原因是NSTimezoneEDT 和 EST 的内部表示是相同的:

// These objects are the same:
[NSTimeZone timeZoneWithAbbreviation:@"EST"];
[NSTimeZone timeZoneWithAbbreviation:@"EDT"];
Run Code Online (Sandbox Code Playgroud)

NSDateFormatter dateFromString:足够聪明,知道从 2 月开始标记为 EDT 的日期的 GMT 偏移量应该为 -4 而不是 -5,即使这不是一个格式良好的日期。但是,当您使用它来显示日期时,如果其时区设置为 EST 或 EDT(将其视为同一事物),它将根据当时是否启用夏令时来使用适当的时区。