NSDateFormatter解析错了?

时间:2013-05-15 13:59:39

标签: ios nsdateformatter

以下代码

    NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:@"MM/dd/yyyy"];
    NSString* source = @"11/30/2012";
    NSDate* date = [dateFormatter dateFromString:source];
    NSLog(@"%@ → %@", source, date);

导致此输出

  

11/30/2012→2012-11-29 15:00:00 +0000

我预计时间会一样。 (即权利2012-11-30 00:00:00 +0000) ...因为我知道输入时间已经是UTC。因此,如果输出时间也以UTC格式输出,则输出应该是同一时间。这是时区问题吗?左字符串日期应该没有指定时区,NSDate应该输出UTC日期?

2 个答案:

答案 0 :(得分:2)

直接打印NSDate将始终以标准格式打印日期和时间,时区为GMT(+0000),而创建时则考虑系统的时区。

您似乎在GMT / UTC之后9小时。

答案 1 :(得分:0)

我想我明白了。

我添加了

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

现在得到

  

11-30-2012→2012-11-30 00:00:00 +0000

...因为我知道输入时间已经是UTC了。如果NSDate报告UTC的另一个时间,则解析器(NSDateFormatter)解析不正确。