4

NSDateオブジェクトから時間と分を削除しようとしています

keyDate = [[array objectAtIndex:i] date];
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar* calendar = [NSCalendar currentCalendar];

NSDateComponents* components = [calendar components:flags fromDate:keyDate];
keyDate = [[calendar dateFromComponents:components] dateByAddingTimeInterval:[[NSTimeZone localTimeZone]secondsFromGMT]];

2013 年 4 月までは正常に動作し、その後はNSDateオブジェクトが -1 時間シフトで作成されます。サマータイムのせいだと思います。

NSDate一年中オブジェクトを 00:00:00 +0000 にするにはどうすればよいですか?

4

1 に答える 1

6

NSDateオブジェクトは本質的に GMT 値として保存されます。ここで発生している問題は、currentCalendar (現時点では DST にある可能性があります) と localTimeZone secondsFromGMT (時期によって切り替わる) を使用して計算を行っていることです。

ここでの最善の解決策は、(あなたが示したように)常に +0000 にしたい場合、シフトするタイムゾーンに基づく代わりに GMT である NSCalendar を使用することです。

または、問題の日時の DST を考慮したNSTimeZoneを使用するように変更することもできます。secondsFromGMTForDate:

于 2012-10-31T10:51:51.540 に答える