我正在使用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);
当它打印这个日期时,它打印出“Thu Jan 12,2012 10:25 AM”,对于“America / New_York”时区,我就是这样,这是错误的。我应该是“Thu Jan 12,2012 11:25 AM”或提前一小时。有没有办法强制日光节省时间?提前谢谢!
编辑: 我注意到它实际上是错误地格式化月份。由于某种原因,它需要4月份才能完成1月份。为什么会这样?
答案 0 :(得分:8)
当它打印这个日期时,会打印出“Thu Jan 12,2012 10:25 AM”,对于“America / New_York”时区,这就是我所在的地方,这是错误的。
不。夏令时直到三月才开始,所以在那个时候应用它是错误的。 NSDateFormatter
在这里正在做正确的事。
如果您想强制使用特定GMT偏移量,则应使用NSTimeZone timeZoneForSecondsFromGMT:
代替localTimeZone
。