1

2 つの日付を比較して、それらの間の時間を判断しようとしています。なぜか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 に答える