対処する必要がある 1600 年 1 月 1 日からの日数として保存されている日付があります。これは、アプリケーションで何度も読み取る必要がある従来の日付形式です。
以前は、カレンダー、空の日付コンポーネント、ルート日付を次のように作成していました。
self.gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar
] autorelease];
id rootComponents = [[[NSDateComponents alloc] init] autorelease];
[rootComponents setYear: 1600];
[rootComponents setMonth: 1];
[rootComponents setDay: 1];
self.rootDate = [gregorian dateFromComponents: rootComponents];
self.offset = [[[NSDateComponents alloc] init] autorelease];
次に、後で整数を日付に変換するために、これを使用します。
[offset setDay: theLegacyDate];
id eventDate = [gregorian dateByAddingComponents: offset
toDate: rootDate
options: 0];
(オフセットの値を他の場所で変更することはありません。)
rootDate
問題は、iOS と Mac OS X で異なる時刻を取得していることです。Mac OS X では、午前 0 時を取得しています。iOS では、8:12:28 を取得しています。(今のところ、これについては一貫しているようです。) 後で日数を追加すると、変な時間が残ります。
OS | OS | レガシー日付 | rootDate | 開催日 ======== | ========== | ==========================|====================== === マック OS X | 143671 | 1600-01-01 00:00:00 -0800 | 1993-05-11 00:00:00 -0700 iOS | iOS | 143671 | 1600-01-01 08:12:28 +0000 | 1993-05-11 07:12:28 +0000
私の製品の以前のリリースでは、時間は気にしませんでした。今私がやります。iOS の奇妙な時間はなぜですか?どうすればよいですか? (時差はDSTだと思います。)
rootComponents の時、分、秒を 0 に設定しようとしましたが、影響はありません。0 以外に設定すると、8:12:28 に追加されます。これがうるう秒やその他の累積的な時計の変更と関係があるのか どうか疑問に思っていました.
それとも、これは iOS で使用する完全に間違ったアプローチですか?