日期格式不正确?

时间:2015-01-15 12:22:34

标签: objective-c nsdate nsdatecomponents

请帮助我解决非显而易见的代码行为

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.hour     = 15;
dateComponents.minute   = 20;
dateComponents.calendar = calendar;

NSDate * endDate    = [calendar dateFromComponents:dateComponents];

EndDate是0001-01-01 12:49:43 +0000。为什么?

由于时区不同,小时值可能不正确。为什么这么奇怪的分钟和秒值? 问候。

1 个答案:

答案 0 :(得分:1)

如果我们只考虑以下代码段

NSCalendar *calendar = [NSCalendar currentCalendar];        
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setCalendar:calendar];
NSDate *date = [calendar dateFromComponents:components]; 

date = 0000-12-31 23:06:32 +0000,因为:

  

日历封装了有关计算时间系统的信息   其中定义了一年的开始,长度和分部。

     

[...]

     

如果提供的组件不足以完全指定绝对时间,则日历将使用其选择的默认值。   Apple Documentation

  

NSDateComponents对象本身毫无意义;您需要知道它所针对的日历,您需要知道这些值是单位的绝对值还是单位的数量。 Apple Documentation

实际上,一切都很好,正是文档所说的。