【问题标题】:Convert timestamp to correct datetime in local timezone - Django将时间戳转换为本地时区中的正确日期时间 - Django
【发布时间】:2021-11-10 14:28:11
【问题描述】:

我从 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

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

【问题讨论】:

    标签: python django datetime


    【解决方案1】:

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

    USE_TZ = True
    

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

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

    【讨论】:

    • 不幸的是,它不会改变它在数据库中的保存方式。那里仍然是 +0
    • 它实际上存储正确,我编辑了我的答案。
    猜你喜欢
    • 2018-09-03
    • 2019-03-24
    • 1970-01-01
    • 2019-03-09
    • 2021-05-02
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多