2016-01-28 14 views
5

datetimeフィールドのDjangoモデルがあります。保存されると、DBに保存されている日時フィールドはタイムゾーン情報を失うため、ナイーブ日時として保存されます。一般的に、Djangoはテンプレートのdatetimeフィールドをレンダリングするときに自動的にそれを変換するので、これは問題ではありません。Django datetimeフィールド - ビューのタイムゾーンに変換

しかし、ビューはどうですか?私はdatetimeサーバー側の文字列表現が必要だとしましょう。夏/冬の時間によって、私のタイムゾーンはGTM + 1またはGMT + 2になる可能性があります。

ビューでローカルtz変換を適用するにはどうすればよいですか?私はピッツといくつかの方法を試しました。いいえ成功は、OMEエントリはGMTにGMT + 1等に変換されていない+ 2 :(

例:

system_tz = pytz.timezone('Europe/Berlin') 
local_dt = item.created_at.astimezone(system_tz) 
local_dt = system_tz.normalize(local_dt) 

追加情報:。

  • ジャンゴ1.8.7
  • 設定。 .USE_TZ = True
  • MySQL
  • なぜ私はこれをやっているのですか?AJAXを介して要求に応じてすべての行をロードするテーブルがあるためです。 strftime()でdatetime値を準備してから、クライアントに送る必要があります。

答えて

3
from django.utils import timezone 

local_dt = timezone.localtime(item.created_at, pytz.timezone('Europe/Berlin')) 

UTC + 1にconevertするには、次の

from django.utils import timezone 

local_dt = timezone.localtime(item.created_at, timezone.get_fixed_timezone(60) 
+0

同じ結果です。一部のエントリはGMT + 1に変換され、他のエントリはGMT + 2に変換されます。たぶん私のタイムゾーンはDSTなので、今日はすべてGMT + 1になるはずです。 – pisapapiros

+0

pisapapiros 2016-03-20(時間変更前)はUTC + 1、2016-03-30(時間変更後)はUTC + 2です。http://www.timeanddate.com/time/zone/germany/berlin – vsd

+0

ああ、それです!私は最終的に私の心を乱し終わったあまりにも多くのことを試みたが、出力は正しかった!それを整理するのを助けてくれてありがとうVladimir – pisapapiros

0

を一切NEはありません

berlin = pytz.timezone('Europe/Berlin') 
local_dt = item.created_at.astimezone(berlin) 

しかし、あなたは通常、ひとつのタイムゾーンで作業している場合、settings.TIME_ZONE = 'Europe/Berlin'でそれを格納するために便利であり、その後、

local_dt = timezone.localtime(item.created_at) 

は、あなたのlocaltimeに変換します:タイムゾーン間の変換にdjango.utilsを使用するエド。

関連する問題