2014-10-08 43 views
3

在python的一個正在運行的實例中,是否有一個函數可以調用來說「嘿python,刷新你對時區信息的瞭解」?所以讓我說我打開python,然後我更改/ etc/localtime。我怎樣才能讓python更新到新的時區?我的目標是不要直接混淆TZ環境變量或引用/ etc/localtime或使用任何特定於操作系統的命令。我也想不重啓python。這可能嗎?如何讓Python獲取OS時區更改?

+1

在何種意義上是_not_刷新其信息?你使用哪些模塊有陳舊的信息? IIRC,所有stdlib時間和語言環境的東西(這是非常小的)根據需要隨時讀取它,或者通常會調用C stdlib函數,並且不會緩存任何內容,但我可能是錯的。如果您使用任何第三方庫,這可能會產生很大的差異,但不知道您使用哪一個(s)很難評論... – abarnert 2014-10-08 18:50:27

+0

time.tzname不會自動刷新,請參閱我的答案並感謝您的你的幫助! – ErlVolton 2014-10-08 18:53:21

回答

1

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> 
+0

'sudo dpkg-reconfigure tzdata'後不會更新'get_localzone()'。您必須重新啓動OP試圖避免的「python」。 – jfs 2014-10-12 19:00:39

2

我一直在尋找爲time.tzset()答案:

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

呵呵,如果你沒有調用['tzset],你不應該期待'localtime'等首先依賴於'$ TZ'或者它在'/ usr/share/zoneinfo'中指向的任何地方'](https://docs.python.org/3/library/time.html#time.tzset)。所以,是的,每當你想刷新時再打電話。 – abarnert 2014-10-08 19:32:08