2

タイムスタンプが UTC であるサーバーからデータを取得するアプリがあります。私のアプリは、現在の現地時間に基づいて画面に表示する必要があります。私が直面している問題は次のとおりです

私がこれをしたら

// the Y M D is fine but time is -8 behind so showing 03:34 instead of 11:34.
NSDate *today = [[NSDate alloc] init]; 

だから私がこれをするとき

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(start <= %@) AND (room == %@) AND (end >= %@)", today, room, today];

今日、NSPredicate に挿入すると「2012-08-10 03:34:00」ですが、「2012-08-10 11:34:00」である必要があるため、正しい結果が得られません。

アプリはさまざまなタイムゾーンで使用される可能性があるため、時間に 8 時間を追加することはできません。私が持っている唯一のアイデアは、NSDateComponentsを使用してそれらの時間を加算/減算し、UTCから何時間遅れているかをデバイスのタイムゾーンに把握させることです。NSPredicate フェッチのために CoreData に何かを設定するだけで簡単な方法はありますか?

4

1 に答える 1

1

[[NSDate alloc] init] は、現在の UTC 日時を返します。

日付をデータベースまたはサーバーに保存する場合は、ベスト プラクティスとして、UTC 時刻を保存し、UI に表示するときのみ常に「ローカル」形式に変換する必要があります。

UI に表示する必要がある場合は、NSDateFormatter を使用して現地時間で適切に表示する必要があります。NSTimeZone オブジェクトを使用してローカル タイム ゾーンを決定し、適切なタイム ゾーンで NSDateFormatter を設定できます。

「ローカルに構成された」 NSDateFormatter によってフォーマットされた NSDate を作成しても、基になる日付/時刻は UTC のままです。

これらの原則に従えば、述語の日付に問題はありません

于 2012-08-11T04:03:55.643 に答える