【发布时间】:2019-06-26 01:41:20
【问题描述】:
我正在使用烧瓶 sqlalchemy 和 postgreSQL,但显示的日期时间有问题,在调查这个问题时我发现了另一个奇怪的事情:
在隐身模式(chrome 浏览器标签)下创建数据库条目会产生不同/错误的时间。 编辑:它与隐身模式无关,这两种情况也发生在正常模式下。我还没弄明白为什么。
这是代码:
我更改了数据库的默认时区:
ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';
型号:
class User(UserMixin, Base):
__tablename__ = 'users'
date_added = Column(DateTime(timezone=True), nullable=False)
我在数据库中添加日期时间的方法:
date_added=datetime.today()
它在数据库中的样子(我此时的当地时间是 13:53:46):
创建非隐身条目
timestamp with time zone
2019-02-01 13:53:46.73817+01
在隐身模式下创建条目
timestamp with time zone
2019-02-01 12:53:46.73817+01
这真的让我很担心。这是完全错误的。即使我将日期时间对象转换为本地时间。两个条目是同时做的,结果却不一样,这怎么可能?
同样在 HTML 中查看这些日期时,postgreSQL 不会应用偏移量,因此第一个日期看起来正确,但第二个日期是错误的。
最初我只是想找到一种方法将所有日期时间对象存储在欧洲/柏林并在欧洲/柏林时间返回它们,所以我不必将 UTC 转换为欧洲/柏林,但现在我认为出现了可怕的错误。
我还在各处仔细检查了我的代码,我没有使用其他方法来操作日期时间对象。
编辑
每次用户登录时我都会保存一个日期时间。目前我在非隐身模式下尝试了这个。我的本地时间是 14:13:33 但它保存到数据库中:
2019-02-01 13:13:33.804339+01。这怎么可能?我知道它不能是随机的,但现在看起来它的节省时间是随机的,有时是 UTC 偏移量,有时是欧洲/柏林偏移量。
编辑
我用SHOW timezone; 仔细检查了所有有问题的表,它们都正确返回Europe/Berlin
【问题讨论】:
-
我假设
Incognito,您指的是Chrome 浏览器Incognito window?对吗? -
您的查询中的会话时区设置可能不一致。我怀疑隐身窗口与它有什么关系。
-
你有没有在
postgresql.conf中设置过timezone =的值,如果有,是怎么设置的? -
是的,我指的是 chrome 隐身窗口。 @克里斯拉尔森
标签: python postgresql datetime sqlalchemy timezone