NSDate有一天休息了吗?

时间:2013-11-03 03:20:12

标签: ios objective-c nsdate nsdatecomponents

我试图将两个日期进行比较,以确定它们之间的时间。出于某种原因,我总是在一天之内完成所有工作。我不太确定是什么导致它,但我相信它是时区?我必须专门设置吗?

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上阅读了其他一些帖子,但我似乎无法看到任何正在体验我的人。

1 个答案:

答案 0 :(得分:1)

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

我的代码是一个类方法,它依赖于由类的+ initialize方法预先设置的全局格里高利历,但想法是一样的。这是我的方法:

+ (NSInteger) daysBetweenStartDate: (NSDate*) startDate andEndDate: (NSDate*) endDate;
{
    NSDateComponents* dateComponents = [gregorian components: NSDayCalendarUnit fromDate: startDate toDate: endDate options: 0]; 
    return dateComponents.day;
}