NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[_dateFormatter setDateFormat:@"dd-MM-yy HH:mm"];
NSString *dateString = [_dateFormatter stringFromDate:date];
NSLog(@"Date: %@ formatted: %@", date, dateString);
[_dateFormatter release];
给我错误的日期格式:
日期:2013-01-31 18:00:00 +0000格式:31-01-13 19:00(来自时间戳:1359655200.000000)
在线转化工具:http://www.onlineconversion.com/unix_time.htm表示第一个日期正确无误:2013-01-31 18:00:00 +0000。
为什么NSDateFormatter会生成与NSLog不同的日期?打印到控制台时,[NSDate description]
不应该使用defaultTimeZone吗?我和[_dateFormatter setTimeZone:[NSTimeZone localTimeZone]]
得到同样的错误;和[_dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]
;
答案 0 :(得分:19)
这是正确的行为,因为:
[NSDate description]
使用UTC,而不是本地时区(这就是说明中有+0000
的原因)。NSDateFormatter
正在使用当地时区。这些匹配的唯一方法是告诉NSDateFormatter
使用UTC。但这可能不是你想要的。
答案 1 :(得分:-1)
这是您发现的时区问题。默认时区采用系统时区。比如,如果你在GMT + 1,你应该得到19-00。您使用的转换器为您提供GMT时间。
如果您需要特定时间区域,并且您知道GMT的偏移量,则可以使用以下内容
[_dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:2*60*60]];//GMT+2.0
希望这能解决问题。