将时间戳转换为本地时区的正确日期时间-Django



我从API获取时间戳。当我用转换它时

timestamp = datetime.fromtimestamp(json.loads(m)["_timestamp"], tz=pytz.timezone('Europe/Berlin')) 

当我打印它时,我在控制台中得到了正确的时间:

2021-11-10 15:22:26+01:00

但当我用将其保存到数据库时

BedTemperatureHistory.objects.create(TimeStamp=timestamp)

时间戳在数据库中看起来像这样(少了一个小时(:

2021-11-10 14:22:26.000000 +00:00 

我的时区设置如下:

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Europe/Berlin'
USE_I18N = True
USE_L10N = True
USE_TZ = False

有人知道我需要做什么才能在数据库中保存正确的时间戳吗?

您需要在设置中启用时区支持。

USE_TZ = True

编辑:时间戳实际上已正确存储在您的问题中。您会注意到,这两个时间实际上是相同的,15:22+01:00与14:22+000:00相同。Django将日期时间存储在UTC,以避免夏令时问题:

Django在数据库中存储UTC的日期时间信息,在内部使用时区感知的日期时间对象,并以模板和表单将其转换为最终用户的时区。

最新更新