9
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]];

4

2 回答 2

19

这是正确的行为,因为:

  1. [NSDate description]使用 UTC,而不是本地时区(这就是说明中有 a 的原因+0000)。
  2. NSDateFormatter使用的是当地时区。
  3. 您在丹麦,当地时区是欧洲中部时间,目前是 UTC 加一小时。

这些匹配的唯一方法是如果您告诉NSDateFormatter使用 UTC。不过,这可能不是您想要的。

于 2013-05-23T17:02:20.597 回答
-1

这是您发现的时区问题。默认时区采用系统时区。比如说,如果你在 GMT+1,你应该得到 19-00。您使用的转换器为您提供 GMT 时间。

如果您想要特定时间的时区并且您知道与 GMT 的偏移量,您可以使用以下内容,

    [_dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:2*60*60]];//GMT+2.0

希望这能解决问题。

于 2013-05-23T15:23:28.997 回答