リモートサーバーに海洋潮dataデータを要求するプログラムを実行しています。この潮dataデータのtime
とdate
は、私のマシンのローカルタイムゾーンに基づいて計算されています。これらのローカルの日付と時刻を使用してdatetime
オブジェクトを作成し、それをDjangoモデルに保存します。
datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
Djangoに投稿する前に、datetime
オブジェクトがローカルタイムゾーンに基づいて作成されたことを認識するようにするにはどうすればよいですか。
私はそれを投稿する前にこのように見えるようにしたいと思います:
datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute, loc_timezone)
マシンのローカルタイムゾーンを動的に取得するにはどうすればよいですか?そして、すべてのユーザーが自分のローカルタイムゾーンに変換された時間を見ることができるようにする方法。
まず、Djangoのタイムゾーンの documentation に精通していることを確認し、_USE_TZ = True
_を設定して、pytz
をインストールします。
私はあなたの日付がどこから来たのかよくわかりません。データの一部としてサーバーから送信される場合(つまり、潮itが測定された時刻を表す場合)は、既にUTCであるか、使用しているタイムゾーンを知る必要があります。モデルを作成する場合、最も簡単なのは、モデルを作成するときに Django.utils.timezone.now()
(タイムゾーン対応の日時を返す)を使用することですインスタンス。
説明したとおりに手動で作成する必要がある場合は、使用法 here に従うか、 make_aware()
を使用します。 :
_from Django.utils.timezone import make_aware
naive = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
make_aware(naive) # current timezone, or...
make_aware(naive, timezone=pytz.timezone("Europe/Helsinki")) # ...specific timezone
_
current timezone は、デフォルトのタイムゾーンになります( _TIME_ZONE
_ 設定で定義) ' activate()
を使用して別のものを指定しました。デフォルトのタイムゾーンは、サーバーのシステムタイムゾーンと同じ場合と異なる場合があります。 pytz
が理解できる形式でシステムのタイムゾーンを取得する方法については、 this answer で説明しています。
最後に、 here で説明したように、ローカルタイムゾーンに変換された時刻がユーザーに表示されることは重要です。
現在のタイムゾーンは、翻訳の現在のロケールに相当します。ただし、Djangoはユーザーのタイムゾーンを自動的に決定するために使用できるAccept-Language HTTPヘッダーに相当するものはありません。代わりに、Djangoはタイムゾーン選択機能を提供します。それらを使用して、あなたにとって意味のあるタイムゾーン選択ロジックを構築します。
ガイダンスについては、そこの例を参照してください。
from Django.utils import timezone
import pytz
timezone.activate(pytz.timezone("Asia/Kolkata"))
timezone.localtime(timezone.now())