0

NSDateがタイムゾーンを表していないことはわかっていますがNSDatePicker、他のクラス ( CalCalendarStore.

例として、日付ピッカーの日付を 01-01-2012 に設定したいと考えています。私はこのようなことをします:

newDate = [NSDate date];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:newDate];
[components setMonth:1];
[components setDay:1];
newDate = [calendar dateFromComponents:components];

これは私の日付ピッカーでは問題なく動作しますが、日付関連のコードをデバッグしようとするとすぐに、非常に混乱します (TZ 関連の 1 時間単位のシフト、場合によっては 1 日単位のシフトもあります)。誰かがこれを行う方法について私にアドバイスできますか?

日付フォーマッタを使用する必要がある場合 (おそらく!)、コードを煩雑にすることなく簡単にデバッグできるようにするにはどうすればよいですか?

4

1 に答える 1

0

NSDate は UNIX 時間の単なるラッパーであり、タイム ゾーンをまったく認識していません。実際には、あらゆる種類のタイム ゾーンを設定する日付フォーマッタです。

同様の問題に対処して、すべての NSDate オブジェクトに UTC 日付を使用するように強制することになりました (「時間」コンポーネント自体について心配していない場合)。

これらの日付を作成するには、timezone プロパティを UTC に設定した新しい NSCalendar インスタンスを使用する必要がありますが、この方法では、一貫した日付を処理し、UTC タイム ゾーン セット フォーマッタを使用してそれらを表示するか、UTC セット カレンダーを中断します。必要に応じてコンポーネントに分割します。

于 2012-06-18T12:26:29.257 に答える