下面是我的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"}]
2条答案
按热度按时间eanckbw91#
Django将表单中的日期时间解释为 * 当前时区 *,在您的情况下是
Europe/Zurich
。所有的日期时间都是saved to the database作为UTC
,这是一个小时后。所以你在print
语句中看到的是以UTC
为单位的时间。更改显示的时区的正常方法是使用
timezone.activate()
,这会影响模板的排序(以及其他)。如果你正在创建一个API,你通常希望坚持使用UTC
。如果你想转换datetime对象,你可以使用pytz,Django的一个必需依赖项:
piv4azn72#
我也有一个问题,我的时间总是被关闭1小时,但这是因为我已经设置了
TIME_ZONE = 'MST'
在我的settings.py
文件。我把它改成了TIME_ZONE = 'America/Denver'
,解决了这个问题。似乎更长的名字自动占夏令时。在我努力解决我的off-by-1错误时,我发现了这一点。虽然它没有直接回答我的问题,但Kevin回答的
Europe/Zurich
部分提供了一个线索,我想与未来的读者分享我的解决方案。