如何在 Django 应用程序中获取原始本地机器时区?

问题描述

在 Django 中,您有一个 TIME_ZONE 设置,据我所知,它以某种方式在运行时修补标准日期和时间包,使它们认为应用程序在指定的时区中工作。因此,用于确定本地时区的通用 Python methods 不起作用(它们仅显示配置的时区)。

我可以像在 this answer 中一样评估 /etc/localtime链接或使用其他 Linux 特定的方法,但我担心可移植性问题,因为一些开发人员在 Windows 上运行该应用程序。

我能否以独立于平台的方式找出机器上的原始时区?

解决方法

由于没有答案,我将在此处发布解决方法。

虽然我们无法恢复初始时区(不影响当前设置),但我们可以在Django初始化之前获取并保存它。例如:

  1. 为了在本地运行,我们可以增加 manage.py
cmd = sys.argv[1] if len(sys.argv) >= 2 else ""
if cmd == "runserver":
    from tzlocal import get_localzone
    os.environ['MACHINE_TIME_ZONE'] = get_localzone().tzname(None)
# ...
execute_from_command_line(sys.argv)
  1. 对于生产,方式取决于您如何启动应用程序。例如,如果您使用的是 Gunicorn,则可以将其放入 gunicorn.conf.pywsgi.py。主要的是你在加载 Django 库之前把它放在某个地方:
from tzlocal import get_localzone
os.environ['MACHINE_TIME_ZONE'] = get_localzone().tzname(None)

稍后您可以访问此环境变量以检索值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...