【问题标题】:Postgres DateTimeField incorrect timePostgres DateTimeField 时间不正确
【发布时间】:2019-12-21 16:41:27
【问题描述】:

我的模块中有 DateTimeField:

class Pairs(models.Model):
    id = models.AutoField(primary_key=True)
    timestamp = models.DateTimeField(null=True)

然后我像这样从 python 插入数据:

        timestamp = datetime.fromtimestamp(pair['timestamp'])
        tz_aware_datetetime = timestamp.replace(tzinfo=pytz.timezone('Asia/Jerusalem'))
        pair_recored =Pairs(session=session_obj,timestamp=tz_aware_datetetime)
        pair_recored.save()

我的代码中的时间戳是: 2019-08-15 08:50:07.795000+02:21

但在我的数据库中,此字段具有不同的值:

2019-08-15 09:29:07.795+03

为什么这些值之间存在这种差异?

【问题讨论】:

  • +02:21 应该是什么时区? 09:29:07 + 02:21 = 08:50:07+03。 PostgreSQL 是正确的。
  • 抱歉,奇数部分让我很困惑,问题不在你所说的 Postgres 中。
  • 我一直想知道为什么pytz.timezone('Asia/Jerusalem') 会返回这样的东西:<DstTzInfo 'Asia/Jerusalem' LMT+2:21:00 STD>

标签: python django postgresql timestamp


【解决方案1】:

您不应该使用.replace() 方法来设置时区,而是使用此方法:

pytz.timezone('Asia/Jerusalem').localize(timestamp)

如果您知道原始时间戳是亚洲/耶路撒冷时区,那么这是使其了解时区的正确方法。它不会使用LMT+2:21:00 STD 等这些有趣的时区,而是使用IDT+3:00:00 DST(用于 DST 时间范围内的日期)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2012-12-31
    • 2018-05-01
    • 2018-12-07
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多