我有两个日期时间对象,它们最初是用Europe/Berlin
设置的,时区为US/Eastern
和pytz
。
datetime.datetime(2019, 6, 11, 10, 20, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)
datetime.datetime(2019, 6, 11, 12, 16, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
这些时间应分别显示为10:20 AM和12:16 PM。
但是,在我的Django模板中,它们是不同的,例如:
{{ value.departure_time.date_time|time:'f A'}} # >> 8:20 AM instead of 10:20AM
我肯定做错了什么,有什么想法吗?
答案 0 :(得分:1)
这对我来说也是新事物,因为我刚刚发现了这一点。因此,我将其作为答案。
来自Django文档:
启用时区支持后,当在模板中呈现日期时,Django会将感知的日期时间对象转换为当前时区。
同样,来自文档:
默认时区是
TIME_ZONE
设置所定义的时区。当前时区是用于呈现的时区。
您应使用
activate()
将当前时区设置为最终用户的实际时区。否则,将使用默认时区。
在渲染之前只需在视图中调用timezone.activate
方法,Django就会在您设置的任何时区中渲染时间。
import pytz
from django.utils import timezone
def my_view(...):
tzname = pytz.timezon("Europe/Berlin")
timezone.activate(pytz.timezone(tzname))
render(...)
您可以使用timezone
filter或timezone
tag覆盖模板特定部分的时区:
{% load tz %}
<!-- Using the filter -->
{{ value|timezone:"Europe/Paris" }}
<!-- Using the tag -->
{% timezone "Europe/Berlin" %}
Berlin time: {{ value }}
{% endtimezone %}