Django 时间戳不一致

发布于 2024-12-10 13:19:26 字数 275 浏览 0 评论 0原文

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

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

I'm working on a scheduling web application for work and am having a very weird problem. The application uses Django and FullCalendar. In the application users can create an event in FullCalendar and the start and end time get stored as a DateTime field in a PostgreSQL database. When the events are returned to the calendar I use a Django DateTag to convert the times to a UnixTimestamp. Everything works perfectly except that the timestamp will randomly be returned one hour early for all events. About every few times I access the page the timestamp will be off by one hour.

Has anyone else experienced a similar problem and been able to find a fix?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

且行且努力 2024-12-17 13:19:26

听起来很可疑,像是时区问题,可能涉及夏令时。
您知道 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';

Suspiciously sounds like a timezone problem, possibly involving daylight saving time.
You are aware of the differences with these types in PostgreSQL?

timestamp
timestamp with time zone

Note the difference:

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

You may find a clue in the chapter on time zones.


Converting timestamp columns is simple. To just cut off the timezone part:

ALTER TABLE tbl ALTER col TYPE timestamp;

To convert all times to a specific timezone, for instance 'UTC':

ALTER TABLE tbl ALTER col TYPE timestamp USING col::timestamp AT TIME ZONE 'UTC';
不打扰别人 2024-12-17 13:19:26

如果这是实时服务器,您可能需要检查 .conf 文件中的时间戳设置?

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

并添加以下行 setenv TZ America/

If this is a live server perhaps you need to check the .conf files for timestamp settings?

For example you may find that at /etc/httpd/conf/httpd.conf

And add the following line setenv TZ America/<Timezone>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文