【问题标题】:Django DateTimeField with timezone information带有时区信息的 Django DateTimeField
【发布时间】:2014-12-31 12:13:39
【问题描述】:

我有一个带有 DateTimeField 的 Django 模型,后端有一个 postgres 9.3 数据库。

measure_datetime = models.DateTimeField()

在我的数据库中,这创建了一个这样的列

ALTER TABLE geoudis_weathermeasurements ADD COLUMN measure_datetime timestamp with time zone;

类型

timestamp with time zone

如您所见,它将日期时间与时区一起存储。我用不同的工具插入了数据。当我做这样一个简单的查询时

SELECT measure_datetime from geoudis_weathermeasurements where "id" = 44525
"2014-10-01 00:04:54+02"

这看起来不错。现在我从 Django 中查询数据,这将为同一行返回一个具有 UTC 时区的 Datetime 对象

2014-09-30 22:04:54+00:00 
tzinfo=UTC
_utcoffset=0:00:00

所以看起来原来的时区信息已经消失了。当然我可以将它设置为不同的时区,但如果我不知道数据是在哪个时区测量的怎么办?显示数据的服务器可以在不同的时区。因此,我认为这种 postgres 数据类型(带时间戳的时区)非常适合。

我在这里做错了吗?感谢您提供任何帮助或建议。

编辑1:

如果我在 settings.py 中设置 USE_TZ = False 我会得到我想要的结果。 在我看来,这种行为是 django 有意的。

【问题讨论】:

    标签: python django postgresql datetime timezone


    【解决方案1】:

    我根本不了解 Django,但我可以告诉你,如果你不知道数据是在哪个时区(UTC 偏移量)测量的,那么你就不知道时间了!

    以下是您的选择:

    1. 确保您只使用 UTC(或使用一个 UTC 偏移量)。这是最好的,但你不能总是选择你得到什么。
    2. 只能使用当地时间。这真的很麻烦(计算机更改位置、用户更改时区设置、夏令时切换……)。

    【讨论】:

      猜你喜欢
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2017-03-17
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      相关资源
      最近更新 更多