【发布时间】:2019-07-15 06:11:46
【问题描述】:
当我在 EST (2019-02-21 05:37:46) 中将时间戳插入 Postgres 表中并且在 Postgresql 表中存储在 IST (2019-02-21 16:07:46) 中时。我希望时间仅存储在 EST 中。谁能帮我解决这个问题?
【问题讨论】:
-
USE_TZ和TIME_ZONE的设置是什么?阅读 this 以了解 Django 如何使用时区。请注意,您的数据库时间戳仍然是正确的时间,并且在获取它时它将反映用户时区中的正确时间。 -
您也应该不想只存储在 EST 中。您正在使用 PostgreSQL,您应该以 UTC 时间存储。这是因为在 EST 时区,夏季有夏令时 (DST),因此当时间跳跃时,您可能会出现错误行为(特别是因为时钟返回时有一个小时的重叠)。直接查询为您提供 IST 中的时间戳这一事实并不意味着时间存储在 IST 中,而是存储在 UTC 中。它显示 IST 可能是因为它托管在 IST 时区的服务器上。
-
@dirkgroten 所以,当我将 EST 时间摄取到 Postgres 时,它存储为 UTC 对吗?在我的 settings.py 中:TIME_ZONE = 'EST' USE_I18N = True USE_L10N = True USE_TZ = False
-
我认为在使用 Postgresql 时将
USE_TZ设置为False是个坏主意,因为默认情况下它是时区感知的。您冒着未正确传递时区并保存错误时间的风险(如果您将天真的日期时间传递给 postgres,它将假定它是 UTC)。如果我是你,我会切换到 True。是的,如果你给它一个感知的日期时间对象,它会正确地存储为 UTC。见this -
好的,谢谢你的信息@dirkgroten
标签: django python-3.x postgresql django-rest-framework django-views