NSDate输出不正确

可能重复:
将[NSDate日期]的日期关闭几个小时

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"Md-yyyy H:mm"]; NSDate *start= [dateFormatter dateFromString:@"10-24-2012 12:15"]; NSDate *end = [dateFormatter dateFromString:@"10-24-2012 15:30"]; 

当我打印出来

  NSLog(@"------main_event start %@", start); NSLog(@"-----main_event end %@", end); 

结果是

  ---main_event start 2012-10-24 19:15:00 +0000 ---main_event end 2012-10-24 22:30:00 +0000 

现在,看起来时间自动增加7小时,12:15变为19:15,15:30变为22:30。

为什么?

因为您的设备所在的时区是UTC-7。

输出为UTC(因此为+0000 ),因为单个NSDate将始终以UTC格式打印出它的时间。

如果您使用NSDateFormatter输出日期,则会考虑您的区域设置。 在这里查看我的答案: NSDate日期方法返回错误的结果

这些都是正确的结果。 当您使用NSLog输出NSDate对象时,它将以GMT NSDate显示。 解析是在您当地的时区完成的。 NSDate对象总是在GMT中 。 如果要在本地时区中打印NSDate对象,则需要NSDateFormatter来打印日期。