NSCalendar为两个不同的日期返回相同的日期组件差异

时间:2015-07-21 09:02:19

标签: date nscalendar

我使用

计算两个日期之间的月和日差异
- NSCalendar components:fromDateComponents:toDateComponents:options:

有趣的是,我在两天内得到了相同的结果:

  • 2014-07-30 - 2015-07-20:11个月20天
  • 2014-07-31 - 2015-07-20:11个月20天

要复制完整命令行程序的要点是:https://gist.github.com/p2/a1f7ad6acc9d555ee00b

相关部分:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSCalendarUnit flags = NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *rslt = nil;

// between 7/30/2014 and 7/20/2015: 11 months 21 days
NSDateComponents *later = [NSDateComponents new];
later.year = 2015;
later.month = 7;
later.day = 20;

NSDateComponents *earlier = [NSDateComponents new];
earlier.year = 2014;
earlier.month = 7;
earlier.day = 30;

rslt = [calendar components:flags fromDateComponents:earlier toDateComponents:later options:0];
// rslt.month is 11, rslt.day is 20

// between 7/31/2014 and 7/20/2015: 11 months 20 days
earlier.day = 31;

rslt = [calendar components:flags fromDateComponents:earlier toDateComponents:later options:0];
// rslt.month is 11, rslt.day is 20

任何人都可以解释发生了什么以及问题可能是什么?

1 个答案:

答案 0 :(得分:0)

原来我是一个白痴,计算机再一次是正确的。感谢Rob指出显而易见的事实:

  

在这种情况下,2014-07-30的11个月是2015-06-30,2014-07-31的11个月也是2015-06-30。 (毕竟,你不希望它成为2015-07-01)。   此日期后20天是2015-07-20。

     

因此,2014-07-30和2015-07-31至2015-07-20的时间分别为11个月和20天。