下面是我的django models.Model类的代码的一部分。如果我在管理面板中设置例如17.03.2018 14:00,它会正确保存此模型并使用正确的日期和时间。但是,如果我打印结果它返回一小时减去17.03.2018 13:00。我该如何解决?
...
starts_at = models.DateTimeField()
...
beginnt_date = json.dumps(starts_at.date().strftime("%d-%m-%Y"), cls=DjangoJSONEncoder)
beginnt_zeit = json.dumps(starts_at.time().strftime("%H:%M"), cls=DjangoJSONEncoder)
result = []
result.append({
'beginnt_date': beginnt_date,
'beginnt_zeit': beginnt_zeit,
})
print(result)
>>> [{'beginnt_date':"17-03-2018", 'beginnt_zeit':"12:38"}]
答案 0 :(得分:1)
Django interprets datetimes in forms位于当前时区,在您的情况下为Europe/Zurich
。然后,所有日期时间都为saved to the database UTC
,这比其后一小时。因此,您在print
声明中看到的是UTC
中的时间。
更改显示时区的正常方法是使用timezone.activate()
,这会影响模板的重新排序(以及其他内容)。如果您要创建API,通常需要坚持使用UTC
。
所有这一切,如果你想转换datetime对象,你可以使用pytz,Django所需的依赖:
from pytz import timezone
starts_at_local = starts_at.astimezone(timezone("Europe/Zurich"))
print(starts_at_local.time().strftime("%H:%M")) # should be what you're expecting