PostgreSQL SQLalchemy 和时间戳带时区,为什么隐身与正常不同?

我正在使用 Flask 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


忽然笑
浏览 236回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python