NSCalendar と NSDateComponents を使用して、2 つの日付の差 (日数) を返しています。これを取得するために使用しているコードは次のとおりです。
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDate *todayDate = [NSDate date];
NSDateComponents *comps = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:todayDate];
[comps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *today = [calendar dateFromComponents:comps];
NSDate *startDate = self.date;
NSDate *endDate = today;
NSLog(@"startDate: %@",startDate);
NSLog(@"endDate: %@",endDate);
NSDateComponents *components = [calendar components:NSDayCalendarUnit
fromDate:endDate
toDate:startDate
options:0];
[components setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSInteger days = [components day];
奇妙な点は、これが 1 日の早い時間帯に完全に機能することですが、午後 6 時か 7 時頃 (私は GMT -7 である山岳標準時を使用しています) に達すると、正しく機能しなくなります。正しい差を返す代わりに、差から 1 日を引いた値を返します。たとえば、0 の代わりに -1 を返したり、2 の代わりに 1 を返したりします。
これはタイムゾーンの問題だと思います。誰もそれを修正する方法を知っていますか? NSCalendar の timeZone と NSDateComponents を GMT、ローカル、およびシステムに設定しようとしましたが、どれも機能していないようです。
何か案は?
ありがとうございました!