我正在工作的调度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>