2015-01-15 204 views
2

请帮我不明显代码的行为日期格式不正确?

NSCalendar *calendar = [NSCalendar currentCalendar]; 

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

NSDate * endDate = [calendar dateFromComponents:dateComponents]; 

结束日期为0001-01-01 12点49分43秒+0000。为什么?

由于时区不同,小时值可能不正确。为什么这样奇怪的分钟和秒钟值? 此致敬礼。

+2

如果我不得不猜测,我会说这是由01/01/0001以来日历中积累的闰秒造成的,所以我会尝试设置年份。但我只是做了这个,所以这可能是完全错误的。 –

+0

有趣的...你可以打印日历的时区属性,特别是属性。 'secondsFromGMT'和'abbreviation'。 –

+0

@GuillaumeAlgis好主意! –

回答

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

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

+1

我们阅读了文档,但实际上它存在疑问。谢谢。 –