出席を追跡する iOS アプリを作成しています。各出席エントリは、ステータス属性 (出席、欠席など) と、出席記録が取得された日を示すNSDate
属性 (called ) を持つオブジェクトに格納されます。date
特定の日付を (aUIDatePickerView
または alike を使用して) 選択すると、その日付のすべての出席レコード (オブジェクト) がテーブル ビューに表示されます。
これは原則として単純に聞こえますが、タイムゾーンに関連する問題に直面しています。s がタイムゾーンとは無関係に保存されることは承知していますNSDate
(つまり、UTC/GMT +0000 を基準にして保存されます)。これは、私がシドニーにいて、たとえば 2012 年 11 月 4 日の日曜日に出勤した場合、日付はタイムゾーンに依存しないものとして保存されているため、iPhone/iPad を別のタイムゾーン (サンフランシスコなど) に持って行った場合、すべての出勤日が記録されることを意味します。レコードは 1 日さかのぼり、この場合は 2012 年 11 月 3 日土曜日に移動します。これは、サンフランシスコの現地時間 (実際にはシドニーの現地時間で翌日) で出席が取得された時点であるためです。
私はこれが起こってほしくありません - 私は日付が絶対であることを望みます。つまり、出席が 2012 年 11 月 4 日の日曜日に取得された場合、世界のどこにいても (そしてどのタイムゾーンにいても)、その日付にとどまる必要があります。ご覧のとおり、これは、たとえば予定のタイミングがタイムゾーンに応じて変化することが望ましいカレンダー アプリケーションとはまったく対照的です。
この問題にアプローチするためのより良い方法についての提案をいただければ幸いです。UIDatePickerView
タイムゾーンに依存しない形式で現在を返すを使用して表示する日付を選択していることに注意してくださいNSDate
。そのため、簡単な比較を行う方法も必要です (NSPredicate
出席オブジェクトは Core Data に保存されているため、 であることが望ましい)。その特定の日のすべての出席オブジェクトを取得します。