我试图将两个日期进行比较,以确定它们之间的时间。出于某种原因,我总是在一天之内完成所有工作。我不太确定是什么导致它,但我相信它是时区?我必须专门设置吗?
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上阅读了其他一些帖子,但我似乎无法看到任何正在体验我的人。答案 0 :(得分:1)
我使用的代码几乎与您发布的内容相同,但我得到了正确的结果。
我的代码是一个类方法,它依赖于由类的+ initialize方法预先设置的全局格里高利历,但想法是一样的。这是我的方法:
+ (NSInteger) daysBetweenStartDate: (NSDate*) startDate andEndDate: (NSDate*) endDate;
{
NSDateComponents* dateComponents = [gregorian components: NSDayCalendarUnit fromDate: startDate toDate: endDate options: 0];
return dateComponents.day;
}