models.DateTimeField()时间总是少1小时

时间:2018-03-17 13:10:56

标签: python django

下面是我的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"}]

1 个答案:

答案 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