如何从PostgreSQL中获取与上传到数据库时使用的相同时区的时间,而不是UTC?

3
  1. Django以“2015-10-31 17:00:00+03”(时间的明确形式)的格式将日期时间上传到DB。

  2. PostgreSQL以UTC时间保存时间。

  3. 在pgAdmin中,我看到的日期时间为“2015-10-31 17:00:00+03”,而不是UTC时间。

是否可以直接从数据库获取“2015-10-31 17:00:00+03”,而不是“2015-10-31 14:00:00+00”?据我了解,如果时间是明确的,则DB中的值会包含TZ信息,但如何提取此TZ呢?


例如,我想上传新的日期时间,但在写入数据库之前,我想将这些日期时间与已存在于数据库中的值进行比较。因此,一个新的日期时间部分的格式为:

“2015-10-31 17:00:00+03”,但是从数据库中获取的值是UTC时间,即

“2015-10-31 14:00:00+00”,而应该也是17:00:00+03!

如何从DB中获取非UTC时间,而是+3时区的时间(以本例为例)?

test = Shows.objects.get(name = 'Test')
test.date_time  # I get UTC, but I need to get it as TZ +3

提示:像这样硬编码

from pytz import timezone
right_time = utc_from_db.astimezone(timezone('Europe/Berlin'))

这是不可能的。必须从最初填充值的数据库中获取准确的时区,因为所有日期时间可能具有不同的时区。

1个回答

1
据我所知,似乎是不可能的。PostgreSQL使用意识到时间类型的TZ将时间转换为UTC,并且无法本地将其转换回来。
如果我想从数据库中获取UTC时间并将其转换回最初的带有TZ的时间,则可以在数据库中再添加一列,并将其命名为TZ名称,例如“Europe/Berlin”,然后使用适当的TZ将UTC时间从数据库中转换为初始时间,如下所示(与问题部分中的代码相同):
from pytz import timezone
right_time = utc_from_db.astimezone(timezone('Europe/Berlin'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接