ユーザーがアクティビティを作成できるDjangoアプリケーションがあり、アクティビティに対して多数のログエントリを作成します。アクティビティには作成日時があり、ログ エントリにも作成日時があります。
アクティビティは、作成時のユーザーのタイムゾーンで作成する必要があります。具体的には、特定のユーザーが別々のタイムゾーンで 2 つのアクティビティを持つ場合があります。タイムゾーンの設定はユーザーごとではなく、アクティビティごとです。ブラウザーの JavaScript で、UTC からユーザーの現在のオフセットを取得できます (喜んでそれに依存します)。
私が知らないのは、これらの時間をデータベースに保存し、レンダリング時に正しく表示するにはどうすればよいですか?
USE_TZ をオンにしました。ここ英国では、すべてが機能します。アクティビティを作成するときに、作成された日時を としてdjango.utils.timezone.now()
保存し、(JavaScript からの) ユーザーの現在のオフセットを timezoneHoursOffset としてアクティビティに保存します。次に、アクティビティとそのログ エントリをページに表示するときに、これを でラップし{% timezone "Etc/GMT+(timezoneHoursOffset)" %} ... {% endtimezone %}
ます。
ただし、サーバーが英国にない場合、このアプローチは機能しません。時間は UTC としてデータベースに保存されます (ORM を使用せずにデータベース自体をチェックインすることでこれを確認しました)。その後、その時間は ORM によって UTC から 8 時間遅れるように「変更」されます (サーバーのタイムゾーンがUTC-8) (これで正確な時刻が得られます!) そして、タグは時刻からさらに{% timezone %}
8 時間を減算します。つまり、表示される時刻は本来あるべき時刻より 8 時間遅れています。
時間を別の方法で保存する必要があるかどうかはわかりません。出力時にそれらを変更します。タイムゾーン テンプレート タグの使用。または、他の何か。これは非常に紛らわしいです。この状況をどのように処理するようアドバイスしていただけますか?