2011-01-18 17 views
5

私はCoreDataストアに日付と時刻を保持しており、最初に入力した時刻を正確にユーザーに提示する必要があります。問題は、東海岸で4時に入場し、後で西海岸で記録された時間を見ると、iPhoneが普遍的な時を現地時間に変換するため、1時と表示されるということです。私はそれが4:00 - おそらく4:00(+ 3h00)を示す必要があります。CoreDataのNSDateはタイムゾーンをカプセル化していますか?

コアデータモデルを再構築する前に、作成時にアクティブなNSTimeZoneを格納されたNSDateオブジェクトから派生させる方法がないことを確認したいと思います。ある?そうでない場合は、NSTimeZoneを作成時に自分自身で捕捉する方法をお勧めしますか? GMTとの作成時NSTimeZone時差を表すNSNumber?

ありがとうございました。

+1

大きな質問です!それは古典的な混乱です。短い答えは「いいえ」です。 –

答えて

8

あなたが発見したように、NSDateは普遍的な時点を表し、特定のタイムゾーン情報は含まれません。

オフセットを保存する代わりに、NSTimeZoneのnameプロパティを保存することをお勧めします。その後、+[NSTimeZone timeZoneWithName:]を使用してタイムゾーンを取得し、それをローカル時間に変換することができます。これにより、ユーザーに情報を表示する方法に最大の柔軟性がもたらされます。

+0

+1は 'NSDate'で約束しようとしていません!タイムゾーン情報を別々に保存することは間違いなく道のりです。 –

+0

ほとんどの場合、GMTとして日付を保存し、情報を表示する必要があるときにユーザーのローカルタイムゾーンに変換することもできます。 –

+0

ありがとう!これは良いアプローチのように思えますが、nameプロパティがDaylight Savings Timeオフセットを取得しているとは思われません。おそらく真のケースですが、ヨーロッパのタイムゾーンの名前をアメリカのものに変換するための基礎として使用することはできませんし、タイムゾーンのオフセットがその週または2 unsync'ed DST?結局、エントリー時にGMTからオフセットを取得するのが最善でしょうか?私はまた、ユーザー情報のためだけにタイムゾーン名または略称を格納することができたと思います。 – ed94133

関連する問題