2

我正在使用 NSDate 格式化程序从 Facebook Graph API 请求(格林威治标准时间)中获取日期并将其转换为用户的本地时区。我可以很好地读取日期并设置其新时区,但是当我打印出新日期时,它似乎没有考虑夏令时。

下面的时间实际上来自请求,但例如在这里我只是输入来自 Facebook 响应的标准时间字符串

NSString *time = @"2012-04-12T15:25:09+0000"
NSTimeZone *localZone = [NSTimeZone localTimeZone];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:localZone];
[formatter setDateFormat:@"yyyy-mm-dd'T'HH:mm:ssZZZZ"];
NSDate *date = [formatter dateFromString:time];
[formatter setDateFormat:@"eee MMM dd, yyyy hh:mm a"];
NSString *dateStr = [formatter stringFromDate:date];
NSLog(@"%@",dateStr);

当它打印这个日期时,它会打印出“2012 年 1 月 12 日星期四上午 10:25”,这对于我所在的“美国/纽约”时区来说是错误的。我应该是“2012 年 1 月 12 日星期四上午 11:25”或提前一小时。有没有办法强制夏令时?提前致谢!

编辑:我注意到它实际上错误地格式化了月份。由于某种原因,它需要四月并成为一月。为什么会这样?

4

1 回答 1

8

当它打印这个日期时,它会打印出“2012 年 1 月 12 日星期四上午 10:25”,对于“美国/纽约”时区,这是我所在的时区,这是错误的。

没有。夏令时直到 3 月才开始,因此在那个时间应用它是错误的。NSDateFormatter在这里做正确的事。

如果你想强制一个特定的 GMT 偏移量,你应该使用NSTimeZone timeZoneForSecondsFromGMT:而不是localTimeZone.

于 2012-04-12T16:36:33.030 回答