Py学习  »  Django

如何停止django postgresql timestramp转换

CHIDAMBARANATHAN M • 6 年前 • 1933 次点击  

当我在EST(2019-02-21 05:37:46)的Postgres表中插入时间戳时,Postgresql表存储在IST(2019-02-21 16:07:46)中。我只想把时间储存在科技部。有人能帮我解决这个问题吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49747
文章 [ 2 ]  |  最新文章 6 年前
dirkgroten
Reply   •   1 楼
dirkgroten    7 年前

一般来说,您应该以UTC格式处理所有日期时间,因为这些都是绝对时间戳,总是正确的。即使你只打算让EST时区的用户使用你的网站,EST时区在夏天有夏令时(DST),所以当时间跳跃时,你可能会出现错误行为(特别是当时钟倒转时有一个小时的重叠)。这意味着:

  • 您的代码应该使用UTC时间戳进行计算并传递
  • 您的数据库应该存储UTC日期时间(PostgreSQL也会这样做)。

向用户显示数据时,应仅转换为本地时区。这是Django的默认行为:

  • USE_TZ = True 默认情况下
  • TIME_ZONE = "America/New_York" 设置默认时区,将考虑DST

因此,当您将一个具有时间意识的日期时间保存到数据库时(以EST为单位),数据库将其存储为UTC。当您获取并显示它时,Django将在用户的当前时区(在您的情况下是EST)中显示它。当您直接使用工具查询数据库时,PostgreSQL会返回UTC,正确的日期时间,但是您的shell或工具可能会在本地时区中显示它。您可以使用另一个答案中@c.grey发布的链接将查询格式化为使用不同的时区。

详细阅读 here

c.grey
Reply   •   2 楼
c.grey    7 年前

在postgres中,您可以更改 日期时间 使用集合n postgres,可以使用集合更改日期时间的默认格式掩码 日期样式

有关更多详细信息,请遵循以下内容 link

也请参考 link

据我所知,PostgreSQL中没有任何设置会在默认情况下从时间戳文本中删减秒数