Django DateTimeField带有时区信息

时间:2014-11-04 14:42:55

标签: python django postgresql datetime timezone

我有一个带有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数据类型(带时间戳的时区)很适合。

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

EDIT1:

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

1 个答案:

答案 0 :(得分:1)

我根本不认识Django,但我可以告诉你,如果你不知道测量数据的时区(UTC偏移),那么你就不知道时间了! / p>

以下是您的选择:

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