我目前正在一个postgres数据库的Django项目上工作。 使用原始时间(用户的本地时间)将时间戳存储在数据库中的数据。 但是,在设置.py,我们有
USE_TZ = True
这意味着Django ORM检索到的所有时间戳都转换为UTC。在
一般来说,这是可以的。但是,我现在正在构建的函数确实需要实时(uesr的本地时间)。当然,我会获取数据并将时间转换为我想要的任何时间,但有两个问题: 1我可以把时间戳转换成EST或任何东西,但我还是不知道原来的时间; 2我希望在ORM查询期间而不是之后进行转换,因为这样会更有效。在
有人知道这件事吗? 提前谢谢!在
1)如果原始日期时间真的很幼稚,那么我会假设它们被存储为您在
TIME_ZONE
设置中设置的任何时区(默认为'America/Chicago'
,但在您的情况下可能是其他时区)。所以转换回那个时区可能会给你原来的时间。来自django文档:(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转换回数据)将责任移交给前端,要么我们还存储用户时区并进行查询后转换。这在我们的用例中并没有被证明是低效的。在
相关问题 更多 >
编程相关推荐