【问题标题】:How to get python to pick up OS timezone change?如何让 python 获取操作系统时区更改?
【发布时间】:2014-10-08 18:26:37
【问题描述】:

在 python 的运行实例中,我可以调用一个函数来说“嘿 python,刷新你对时区信息的了解”吗?所以假设我打开 python,然后我更改 /etc/localtime 。如何让 python 更新到新时区?我的目标是不要弄乱 TZ 环境变量或直接引用 /etc/localtime 或使用任何特定于操作系统的命令。我也不想重新启动python。这可能吗?

【问题讨论】:

  • 在什么意义上刷新它的信息?您正在使用哪些模块具有过时的信息? IIRC,所有 stdlib 时间和语言环境的东西(非常少)根据需要即时读取它 - 或者通常调用这样做的 C stdlib 函数 - 并且不缓存任何东西,但我可能是错的。如果您使用任何第三方库,那可能会产生很大的不同,但如果不知道您使用的是哪个(或哪些),就很难评论……
  • time.tzname 不会自动刷新,请看我的回答,感谢您的帮助!

标签: python timezone


【解决方案1】:

我正在寻找的答案是time.tzset()

>>> time.tzname[time.daylight]
'CDT'
>>> #Use dpkg-reconfigure tzdata
...
>>> time.tzset()
>>> time.tzname[time.daylight]
'EDT'
>>> 

【讨论】:

  • 哦,如果你没有打电话给@987654322,你不应该期望localtime等首先依赖$TZ/usr/share/zoneinfo中指向的任何东西@。所以是的,只要你想刷新,就再次调用它。
【解决方案2】:

timetzlocal

>>> from datetime import datetime
>>> from tzlocal import get_localzone
>>> tz = get_localzone()
>>> datetime.now(tz).tzinfo
<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>

【讨论】:

  • get_localzone()sudo dpkg-reconfigure tzdata 之后不会更新。您必须重新启动 OP 试图避免的 python
猜你喜欢
  • 2020-01-07
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
相关资源
最近更新 更多