Django时间戳不一致



我正在工作的调度web应用程序,我有一个非常奇怪的问题。该应用程序使用Django和FullCalendar。在应用程序中,用户可以在FullCalendar中创建事件,并将开始和结束时间作为DateTime字段存储在PostgreSQL数据库中。当事件返回到日历时,我使用Django DateTag将时间转换为UnixTimestamp。除了所有事件的时间戳将随机提前一小时返回之外,一切工作都很完美。大约每隔几次访问该页面,时间戳就会偏离一个小时。

是否有其他人遇到过类似的问题并能够找到解决方案?

听起来像是时区问题,可能与夏令时有关。
你知道这些类型在PostgreSQL中的区别吗?

timestamp
timestamp with time zone

注意区别:

db=# SELECT '2011-10-20 10:00+1'::timestamp;                                                                                                                                                                  timestamp
---------------------
 2011-10-20 10:00:00

db=# SELECT '2011-10-20 10:00+1'::timestamp AT TIME ZONE '-1';
        timezone
------------------------
 2011-10-20 11:00:00+02

你可以在关于时区的那一章中找到线索。


转换时间戳列很简单。直接截断时区部分:

ALTER TABLE tbl ALTER col TYPE timestamp;

将所有时间转换为特定的时区,例如'UTC':

ALTER TABLE tbl ALTER col TYPE timestamp USING col::timestamp AT TIME ZONE 'UTC';

如果这是一个活动的服务器,也许你需要检查.conf文件的时间戳设置?

例如,您可能会发现在/etc/httpd/conf/httpd.conf

并添加以下行setenv TZ America/<Timezone>

最新更新