以下是代码:
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
NSDate* newTime = [dateFormatter dateFromString:@"2011-10-19T12:22:07Z"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormatter setDateFormat:@"dd-MMM-yyyy HHmm"];
NSString* finalTime = [dateFormatter stringFromDate:newTime];
问题:
我在多伦多(EST,GMT-5)。我的最后时间应该显示0722,我看到0822.检查对象我可以看到newTime是'2011-10-19 08:22:07 EDT'。我不确定为什么会发生这种情况但是它仍然存在于finalTime字符串中,尽管将dateFormatter时区设置为systemTimeZone。我假设systemTimeZone是EDT呢?任何了解为什么会发生这种情况或如何纠正它的人都会非常感激。
提前致谢。
答案 0 :(得分:2)
您目前在多伦多EST。你回来的这个时间报告正在显示EDT。这是东部夏令时。确保你减去一个小时的夏令时,因为它是EDT而不是EST。
我现在出去所以我无法测试此代码,但我认为这应该有效:
NSDate *currentDate = [NSDate date];
NSTimeZone *currentZone = [NSTimeZone localTimeZone];
if ([currentZone isDaylightSavingTimeForDate:currentDate]) {
//adjust the time by 1 hour here
}
答案 1 :(得分:1)
一些事情:
Z
周围的引号。这将允许日期格式化程序从实际日期字符串中确定时区。0822
的输出对于您的系统时区是正确的,因为您在10月19日的白天节省了时间。那天你是GMT-4,而不是GMT-5。在加拿大,2011年,夏令时于11月6日结束。