【发布时间】:2021-06-01 14:15:29
【问题描述】:
在 Django 中,您有一个 TIME_ZONE 设置,据我了解,它以某种方式在运行时修补标准日期和时间包,使他们认为应用程序在指定的时区工作。因此,用于确定本地时区的通用 Python methods 不起作用(它们只显示配置的时区)。
我可以像this answer 一样评估/etc/localtime 的链接,或者使用其他Linux 特定的方法,但我担心可移植性问题,因为一些开发人员在Windows 上运行该应用程序。
我能否以独立于平台的方式找出机器上的原始时区?
【问题讨论】:
-
“本地机器”是什么意思?我们是在谈论运行 Django 应用程序的服务器还是浏览应用程序的客户端机器?
-
@Selcuk 我应该更具体一点:运行 Django 服务器应用程序的操作系统用户帐户中的时区设置。
-
Django 设置了一个环境变量,但不修补任何东西。您可以尝试使用tzlocal 包来获取 windows 和 unix 上的服务器时区。
-
@KevinChristopherHenry 也许我遗漏了一些东西,但就像我在我的问题中发布的那样,提供的链接(包括 tzlocal 包)的每个方法都会返回在
TIME_ZONE中配置的区域。除了更改标准包之外,我不知道如何解释它。例如。datetime.now().astimezone().tzinfo在纯 Python 中显示正确的时区,但在运行 Django 应用程序时显示TIME_ZONE时区。 -
@KevinChristopherHenry 文档对此提供了一些见解:“在 Unix 环境中,Django 将 os.environ['TZ'] 变量设置为您在 TIME_ZONE 设置中指定的时区”。这似乎会影响标准日期/时间包的工作。问题是如何回退到获取时区的默认方法,而不影响使用日期/时间函数的其他地方。
标签: python django timezone django-timezone