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時に追加されました。
わたしはこれを知らなかった。プロジェクトのいくつかのセクションでは、Javascriptメソッドを使用していますが、うまくいきます。私が取り組んでいる部分では、ユーザは、例えば午前10時から午後2時まで何かを見なければならず、その時には1日おきに繰り返されます。私はあなたがDjangoがネイティブにこれを理解しなければならないと言ったものと思う。もしそうでなければ、私は私の要求と共に現地のUTC時間を送り、それに基づいてユーザーに情報を返します。 –
@MaxMillerタイムゾーンのサポートを有効にするには、['USE_TZ = True'](https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-USE_TZ)を設定してください。 – xyres