2017-12-29 21 views
2

私はDjangoにアプリケーションを構築しています。このアプリケーションは、エンドユーザーが特定の日の時刻(午前12時から午前12時)に敏感な情報を取得できるようにします。真夜中から30分刻みまでの秒数を表す整数としてデータベースにこの情報を格納します。私はDjangoのタイムゾーンのドキュメント:https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/を見ていて、Djangoがエンドユーザの時間を自動的に使用するのか、この情報を収集して私のビューでそれを考慮する必要があるのか​​混乱していました。Djangoは自動的にエンドユーザのタイムゾーンを検出しますか?

すべての情報が役立ちます。ありがとう。

答えて

0

Djangoはエンドユーザーのタイムゾーンを検出しません。しかし、それはかなり賢いです。あなたが見ることができるように、サーバーとクライアントが異なるタイムゾーンにあり、したがって、異なるローカル時間を持っている

Client    | Server    | UTC 
time  9:00 am | time  12:00 pm | time 7:00 am 
timezone UTC+2:00 | timezone UTC+5:00 | 

が、この考えてみましょう。

ここで、クライアントがデータベースに新しいオブジェクトを作成するよう要求したとします。このオブジェクトには日付フィールドがあります。だからDjangoは、オブジェクトの日付をUTCに保存します。

どのように機能しますか?

Djangoは、サーバーのローカル時間(つまり、午前12:00)を最初に取得します。その後、UTC時間に変換します。これは5時間を控除して7:00になります。これはDjangoがオブジェクトを保存するために使用する時です。


ここで、クライアントは、後で、そのオブジェクトをいつ作成したかを見たいとします。

オブジェクトの作成時刻は7:00 am UTCです。オブジェクトの作成時間をクライアントに表示するには、別の答えでJasonによってリンクされたアプリを使用するか、しかし、ユーザーがプロキシを使用している可能性があるため、IPを使用したタイムゾーン検索は非常に信頼できません。

または、時刻をUTCで表示し、JavaScriptを使用してクライアントの現地時間に変換することができます。 JSはブラウザ上で動作するため、コンピュータからクライアントのタイムゾーンを正確に選択します。 (それが2時間進んUTCのように)あなたが2時間を追加することで、クライアントのタイムゾーンに7:00 am UTCを変換する際

は最後に、クライアントは、彼らが期待したものである9:00 amとして、オブジェクトの作成時間が表示されます。

UTC-5:00タイムゾーンに地球の反対側に別のクライアントがある場合は、2:00 amとなる5時間を差し引くことで、オブジェクトの時刻を表示することができます。そのユーザーによれば、それは午前2時に追加されました。

+0

わたしはこれを知らなかった。プロジェクトのいくつかのセクションでは、Javascriptメソッドを使用していますが、うまくいきます。私が取り組んでいる部分では、ユーザは、例えば午前10時から午後2時まで何かを見なければならず、その時には1日おきに繰り返されます。私はあなたがDjangoがネイティブにこれを理解しなければならないと言ったものと思う。もしそうでなければ、私は私の要求と共に現地のUTC時間を送り、それに基づいてユーザーに情報を返します。 –

+0

@MaxMillerタイムゾーンのサポートを有効にするには、['USE_TZ = True'](https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-USE_TZ)を設定してください。 – xyres

関連する問題