请帮助我解决非显而易见的代码行为
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。为什么?
由于时区不同,小时值可能不正确。为什么这么奇怪的分钟和秒值? 问候。
答案 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
实际上,一切都很好,正是文档所说的。