0

NSDate2つのオブジェクトの年/月/日が同じで、時刻が異なるかどうかをテストしたいと思います。これが私のコードです:

NSDate *date1 = [dataDictionary1 valueForKey:@"date"];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.timeZone = [NSTimeZone systemTimeZone];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date1];
NSDate *newDate1 = [calendar dateFromComponents:components];

NSDate *date2 = [dataDictionary2 valueForKey:@"date"];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.timeZone = [NSTimeZone systemTimeZone];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date2];
NSDate *newDate2 = [calendar dateFromComponents:components];

ただし、とでnewDate1戻ってきます。2012-05-01 05:00:00 +0000newDate22012-05-01 04:00:00 +0000

私のタイムゾーンがGMTではないため、時間はゼロではありませんが、2時間が等しくないのはなぜですか?異なる時刻の日付が等しいかどうかをテストするためのより良い方法を知っていますか?(つまり、それぞれの日付コンポーネントを取得して、各日/月/年の同等性をテストするよりも効率的ですか?)

4

1 に答える 1

0

これを試して:

NSDate *date1 = [dataDictionary1 valueForKey:@"date"];
long noTime1 = [date1 timeIntervalSinceReferenceDate] / (60*60*24);

NSDate *date2 = [dataDictionary2 valueForKey:@"date"];
long noTime2 = [date2 timeIntervalSinceReferenceDate] / (60*60*24);

if (noTime1 == noTime2) {
    // same date
}

もちろん、これは、単に日付部分を比較したいだけで、実際の日、月、または年の値を気にしない場合にのみ機能します。

于 2012-10-27T03:05:42.120 に答える