模型.日期时间字段() 时间总是少 1 小时



下面是我的 Django 模型代码的一部分。模型类。如果我在管理面板中设置,例如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"}]

Django 将表单中的日期时间解释为当前时区,在您的情况下是Europe/Zurich。然后所有日期时间都作为UTC保存到数据库中,这比这晚了一个小时。因此,您在print声明中看到的是UTC的时间。

更改显示时区的正常方法是使用 timezone.activate() ,这会影响模板的重新生成(以及其他内容(。如果您正在创建 API,您通常需要坚持使用 UTC .

综上所述,如果你确实想转换日期时间对象,你可以使用 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

最新更新