我正在尝试计算两个日期之间的天数。我是这样做的:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned int calendarFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDate *dateToCheck = (self.subscriptionEnd ?: self.trialEnd);
NSLog(@"dateToCheck: %@", dateToCheck);
NSLog(@"current date: %@", [self systemTimeZoneDate]);
NSDateComponents *components = [gregorian components:calendarFlags
fromDate:[self systemTimeZoneDate]
toDate:dateToCheck
options:0];
return [components day] >= 0 ?: 0;
在撰写本文时,NSLog输出以下内容:
2014-09-05 22:56:20.054 tweepy[9635:60b] dateToCheck: 2014-10-05 08:02:51 PM +0000
2014-09-05 22:56:20.057 tweepy[9635:60b] current date: 2014-09-05 10:56:20 PM +0000
它返回了一天的差异,因为iOS认为那天是YDM格式。
我应该在某处指明日期格式吗?
以下是self.subscriptionEnd
的设置方式代码:
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = 30;
self.subscriptionEnd = [gregorianCalendar dateByAddingComponents:dateComponents toDate:[self systemTimeZoneDate] options:0];
以下是self.trialEnd
的设置方式代码:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = 2;
self.trialEnd = [gregorian dateByAddingComponents:dateComponents toDate:[self systemTimeZoneDate] options:0];
答案 0 :(得分:1)
日期格式与它无关。正在发生的事情是NSDateComponents
正在为您提供您所要求的内容,即年,月和日的总差异。如果您只想要日期,则只需提供NSDayCalendarUnit
。 docs明确指出:
某些操作可能不明确,并且计算的行为是特定于日历的,但通常在较小的组件之前计算较大的组件;例如,在公历中,结果可能是1个月和5天,而不是例如0个月和35天。