私はNSDateクラスについて完全に台無しにしています
日付でスケジュールするスケジューリングアプリケーションをやっています
スケジュールが 2011 年 5 月 3 日 13:45 (各タイム ゾーン) であることを知っておく必要があります。タイムゾーンが GMT+5 か GMT+8 かは関係ありません)...
しかし、NSDate は (クラスの名前が示すように) 日付ではなく TIME MOMENT を格納するため、いくつかの問題が発生しています。
1) NSDate は保存されたタイムゾーンを保存しません。つまり、日付が 5.3.2011 13:45 の場合、それが GMT0 なのか GMT +1 なのかわかりません (現地時間よりも2011 年 5 月 3 日 14:45)
2) 2 つの NSDate が同じ日 (9 月 7 日など) である場合、それらは異なるタイムゾーンにある可能性があるため、比較できません (日付は 1 つのゾーンの時点を表すため、この時点は 1 つの日に対応します。他のタイムゾーンから別のタイムゾーンへ)
何をすべきか?
私は次のような方法を見つけました
-(NSDate *) dateToLocalTime
{
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: self];
return [NSDate dateWithTimeInterval: seconds sinceDate: self];
}
-(NSDate *) dateToGlobalTime
{
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = -[tz secondsFromGMTForDate: self];
return [NSDate dateWithTimeInterval: seconds sinceDate: self];
}
しかし、これは期待どおりに機能しません
なぜなら、彼らは
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = -[tz secondsFromGMTForDate: self];
つまり、これを適切に機能させるには、日付を defaultTimezone に保存する必要がありました