Django时区UTC

2024-09-28 13:39:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在一个postgres数据库的Django项目上工作。 使用原始时间(用户的本地时间)将时间戳存储在数据库中的数据。 但是,在设置.py,我们有

USE_TZ = True

这意味着Django ORM检索到的所有时间戳都转换为UTC。在

一般来说,这是可以的。但是,我现在正在构建的函数确实需要实时(uesr的本地时间)。当然,我会获取数据并将时间转换为我想要的任何时间,但有两个问题: 1我可以把时间戳转换成EST或任何东西,但我还是不知道原来的时间; 2我希望在ORM查询期间而不是之后进行转换,因为这样会更有效。在

有人知道这件事吗? 提前谢谢!在


Tags: 数据项目django函数用户py数据库true
1条回答
网友
1楼 · 发布于 2024-09-28 13:39:57

1)如果原始日期时间真的很幼稚,那么我会假设它们被存储为您在TIME_ZONE设置中设置的任何时区(默认为'America/Chicago',但在您的情况下可能是其他时区)。所以转换回那个时区可能会给你原来的时间。来自django文档:

"When USE_TZ is False, this is the time zone in which Django will store all datetimes. When USE_TZ is True, this is the default time zone that Django will use to display datetimes in templates and to interpret datetimes entered in forms."

https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TIME_ZONE

通常时区信息实际上是在db连接(https://docs.djangoproject.com/en/dev/ref/databases/#optimizing-postgresql-s-configuration)上设置的,所以通过psql连接到postgres时,您可能不会得到UTC格式的日期时间,因为所使用的时区将默认为系统的时区,但我不确定为什么django中的原始查询不会出现这种情况。在

2)我不能说我做了很多小时的研究,但是我相信设置USE_TZ会让你不得不转换post查询。您可以重写连接时区,但我不知道在运行时执行此操作的简单方法,因为由于USE_TZ,它将默认为UTC。在

在以前的项目中,我曾经参与过,也遇到过类似的问题,我们要么按照您的意见(frontend返回UTC datetimes并从UTC转换回数据)将责任移交给前端,要么我们还存储用户时区并进行查询后转换。这在我们的用例中并没有被证明是低效的。在

相关问题 更多 >

    热门问题