1

我试图将两个日期一起比较以确定它们之间的时间。出于某种原因,我一直在休息一天。我不太确定是什么原因造成的,但我相信它是时区?我必须专门设置吗?

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"MM/dd/yy"];

newAssignment.dueDate = [formatter stringFromDate:self.dueDatePicker.date];

NSDate *today = [NSDate date];

//Difference between dates test
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

int unitFlags = NSDayCalendarUnit;

NSDateComponents *comps = [gregorian components:unitFlags fromDate:today toDate:self.dueDatePicker.date options:0];
newAssignment.daysUntilAssignmentDueInt = [comps day];

//Test to compare dates
NSLog(@"\n\ntoday's date: %@\ndate picked: %@\ndue in: %d\n", today, self.dueDatePicker.date, newAssignment.daysUntilAssignmentDueInt);

我的 NSLog 输出:

today's date: 2013-11-03 03:17:26 +0000
date picked: 2013-11-05 04:17:12 +0000
due in: 1

我已经走了这么多,认为今天的夏令时变化会改变这一切。但我只是不确定了。

编辑:我在 StackOverflow 上阅读了其他一些帖子,但我似乎看不到任何正在经历我的人。

4

1 回答 1

1

我使用了与您发布的代码几乎相同的代码,并且得到了正确的结果。

我的代码是一个类方法,它依赖于通过类的 +initialize 方法预先设置的全局公历,但是思路是一样的。这是我的方法:

+ (NSInteger) daysBetweenStartDate: (NSDate*) startDate andEndDate: (NSDate*) endDate;
{
    NSDateComponents* dateComponents = [gregorian components: NSDayCalendarUnit fromDate: startDate toDate: endDate options: 0]; 
    return dateComponents.day;
}
于 2013-11-03T04:03:34.020 回答