创建错误的 NSDate

creating a wrong NSDate

这是代码

  NSDateComponents *comps = [[NSDateComponents alloc] init];
  [comps setDay:13];
  [comps setMonth:6];
  [comps setYear:2015];

  NSCalendar *gregorian = [[NSCalendar alloc]
                           initWithCalendarIdentifier:NSGregorianCalendar];
  NSDate *date = [gregorian dateFromComponents:comps];

NSLog(@"date = %@", date);

结果是2015-06-12 23:00:00 +0000

12?今天是 13!!!

为什么会这样?漏洞?

问题在于 NSLog()NSDate description 方法显示格林威治标准时间 (UTC) 日期。请注意时间偏移:“+0000”,这可能不是您的时区。

所有日期都以格林威治标准时间内部存储。要获取当前或其他时区的字符串,请使用 NSDateFormatter.