【发布时间】:2019-04-09 16:46:03
【问题描述】:
时区快把我逼疯了。每次我想我已经弄明白了,有人改变了时钟,我得到了十几个错误。我想我终于到了存储正确价值的地步。我的时间是timestamp with time zone,我不会在保存时区之前删除它们。
TIME_ZONE = 'Europe/London'
USE_I18N = USE_L10N = USE_TZ = True
这是 Postgres 通过 dbshell 获取的特定值:
=> select start from bookings_booking where id = 280825;
2019-04-09 11:50:00+01
但是这里通过 shell_plus 的记录是一样的
Booking.objects.get(pk=280825).start
datetime.datetime(2019, 4, 9, 10, 50, tzinfo=<UTC>)
DAMMIT DJANGO,这不是 UTC 时间!
这些时间在模板/管理员/等中工作很好,但是当我生成 PDF 和电子表格报告时,这一切都出错了,我突然不得不手动重新本地化时间。我不明白为什么我必须这样做。数据已本地化。查询到数据库和我获取数据之间发生了什么?
我经常遇到这些问题,我对自己在这里完全没有信心——这对高级开发人员来说非常令人不安——所以我把自己放在你的脚下。我应该做什么?
【问题讨论】:
-
请注意,数据库连接有自己的timezone settings:“PostgreSQL 后端将日期时间存储为
timestamp with time zone。实际上,这意味着它将日期时间从连接的时区转换为存储上的 UTC,并从UTC 到检索时连接的时区。” Django sets the database connection toUTC,而您的 dbshell 配置可能使用了其他东西。
标签: django postgresql django-postgresql django-timezone