Django 1.4の現在のベストプラクティスは、すべてをUTCで保存することであると理解しており、datetime
それに同意します。また、すべてのタイムゾーンの会話は、次のようにテンプレートレベルで実行する必要があることも理解しています。
{% load tz %}
{% timezone "Europe/Paris" %}
Paris time: {{ value }}
{% endtimezone %}
request
ただし、すべてPythonでUTC時刻をの現地時間に変換する必要があります。Ajax(より具体的にはDajaxice )を使用してJSONで文字列を返すため、テンプレートタグを使用できません。
現在、これは私のコードですajax.py
:
# checked is from the checkbox's this.value (Javascript).
datetime = timezone.now() if checked else None
$ order_pk is sent to the Ajax function.
order = Order.objects.get(pk=order_pk)
order.time = datetime
order.save()
return simplejson.dumps({
'error': False,
'datetime': dateformat.format(datetime, 'F j, Y, P') if checked else 'None'
})
したがって、現在の時刻がApril 14, 2012, 5:52 p.m.
EST時刻(私のローカルタイムゾーン)であっても、JSON応答はApril 14, 2012, 9:52 p.m
UTC時刻であるため、を返します。
TIME_ZONE
また、Djangoはリクエストごとに呼び出されるテンプレート変数(実際にはrequest
変数の一部ではない)を格納していることに気付きました。私の場合America/New_York
、Djangoは各訪問者のローカルタイムゾーン(HTTPヘッダーに基づく)を把握できると思いますか?
とにかく、私の質問は2つあります。
- 訪問者のローカルタイムゾーンを取得するにはどうすればよい
ajax.py
ですか?(おそらく、のような文字列引数として渡します{{ TIME_ZONE }}
) - 訪問者のローカルタイムゾーンで、UTC
timezone.now()
をローカルタイムゾーンに変換し、Djangoを使用して文字列として出力する方法はdateformat
?
編集: @agfの場合
timezone.now()
UTC時刻を与えるUSE_TZ = True
:
# From django.utils.timezone
def now():
"""
Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()
とにかくdatetime
UTC以外のものに変換する方法はありますか?たとえばcurrent_time = timezone.now()
、次にcurrent_time.replace(tzinfo=est)
(EST =東部標準時)のようなことを行うことはできますか?