是否有python
(或pytz
)一個跨平臺的函數,返回對應於當前在計算機上設置的時區一個tzinfo
對象?因爲它們不是跨平臺如何獲取當前時區對應的tz_info對象?
回答
>>> import datetime
>>> today = datetime.datetime.now()
>>> insummer = datetime.datetime(2009,8,15,10,0,0)
>>> from pytz import reference
>>> localtime = reference.LocalTimezone()
>>> localtime.tzname(today)
'PST'
>>> localtime.tzname(insummer)
'PDT'
>>>
time.timezone
返回當前時區偏移
環境變量不能指望。還有一個datetime.tzinfo
,如果你需要更復雜的結構。
time.timezone()只是返回UTC的偏移量。我想要一個tzinfo對象。所以我可能會什麼功能: 1.定義一個對應於tzinfo對象的類 2. instanciate對象 3.返回它 –
'datetime'文檔有一個例子,解釋了'tzinfo'的使用。 – SilentGhost
'datetime.datetime.now()+ datetime.timedelta(seconds = time.timezone)'很好地完成了這個技巧。 – Baczek
我沒有用它自己,但dateutil.tz.tzlocal()應該做的伎倆。
http://labix.org/python-dateutil#head-50221b5226c3ccb97daa06ea7d9abf0533ec0310
'tzlocal()'可能會失敗的日期從過去例如,''在2011年之前歐洲/ Moscow''時區有不同的UTC偏移量('dateutil'失敗,但'pytz'適用於這樣的時區) – jfs
也許嘗試:
import time
print time.tzname
#OR time.tzname[time.daylight]
將此與第一個答案進行比較,爲什麼是-1? –
['time.daylight']表示當前時區是否具有DST。它並不表示DST是否有效。 'time.tzname'也不是'tzinfo'實例(它是一個字符串)。請參閱[如何獲取系統時區設置並將其傳遞給pytz.timezone?](http://stackoverflow.com/q/13218506/4279)以瞭解即使您將得到正確的tzname;這並不意味着你會找到當地的時區。請參閱[在Python中獲取計算機的utc偏移量](http://stackoverflow.com/a/3168394/4279),它演示了獲取當前utc偏移量的幾種方法。 – jfs
tzlocal
module返回pytz
時區工作在* nix和Win32:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
# get local timezone
local_tz = get_localzone()
print local_tz.localize(datetime(2012, 1, 15))
# -> 2012-01-15 00:00:00+04:00 # current utc offset
print local_tz.localize(datetime(2000, 1, 15))
# -> 2000-01-15 00:00:00+03:00 # past utc offset (note: +03 instead of +04)
print local_tz.localize(datetime(2000, 6, 15))
# -> 2000-06-15 00:00:00+04:00 # changes to utc offset due to DST
注:這既考慮DST和非DST UTC時差的變化。
我被問同樣的對自己說,我發現在[1]的答案:
看看節8.1.7:格式爲「%Z」(小寫,在Z大寫的回報也時區,而不是在4位數字格式,但在時區的縮寫,形式等的strftime在[3])返回的形式「+/- 4位數」,也就是在電子郵件報頭(參見RFC 2822的第3.3節標準,請參閱[2],該過程廢止了爲電子郵件標題指定時區的其他方式)。
所以,如果你想在這個格式的時區,使用方法:
time.strftime("%z")
[1] http://docs.python.org/2/library/datetime.html
[2] http://tools.ietf.org/html/rfc2822#section-3.3
[3]時區縮寫:http://en.wikipedia.org/wiki/List_of_time_zone_abbreviations,只爲參考。
它不給'tzinfo'對象。您可以將本地時區的當前utc偏移量設置爲秒數:'-altzone if daylight and localtime()。tm_isdst> 0 else -timezone'(所有名稱均來自'time'模塊)。 – jfs
這下面的代碼段在不同的時區返回時間,而不管服務器上配置的時區的。
# pip install pytz tzlocal
from tzlocal import get_localzone
from datetime import datetime
from pytz import timezone
local_tz = get_localzone()
local_datetime = datetime.now(local_tz)
zurich_tz = timezone('Europe/Zurich')
zurich_datetime = zurich_tz.normalize(local_datetime.astimezone(zurich_tz))
有沒有理由,不要在這裏使用'zurich_datetime = datetime.now(timezone('Europe/Zurich'))'?順便說一句,[不必在'.astimezone()']之後調用'.normalize()'(https://answers.launchpad.net/pytz/+question/249229#6) – jfs
- 1. Java:獲取當前正在執行的Method對應對象
- 2. DataGridView獲取當前選定的對象
- 3. 獲取當前對象的功能?
- 4. 如何獲取傳入當前對象的對象的類名或文件名?
- 5. 獲取對象創建當前Object
- 6. 獲取JSON「當前名稱/對象」?
- 7. 獲取對象的區域
- 8. 如何禁用R警告:對象(UTC)的時區不同於當前時區()
- 9. 如何在獲取PFquery對象時獲取PFRelation對象?
- 10. 如何從當前時間獲取獲取時區?
- 11. 如何獲取當地時區的當前日期和時間?
- 12. 如何獲取當前運行的類作爲對象?
- 13. 如何在jsrender中獲取for循環中的當前對象
- 14. 如何使用@ ngrx/store獲取State對象的當前值?
- 15. 如何獲取場景中每個對象的當前位置?
- 16. 如何獲取當前的Connection對象在Spring JDBC
- 17. 如何在NSEnumerator迭代中獲取當前對象的索引?
- 18. 如何從C函數中獲取對象的當前實例
- 19. 如何獲取當前登錄用戶的用戶對象
- 20. 如何獲取Android OS上的當前視圖對象?
- 21. Django - 如何獲取queryset中的當前對象?
- 22. 如何獲取組件(symfony 1.4)中的當前對象?
- 23. 如何從另一個對象獲取當前的Cmdlet?
- 24. 如何獲取當前類對象的引用?
- 25. 如何獲取創建當前對象的類?
- 26. 如何獲取當前綁定的頂點數組對象?
- 27. 如何從活動對象獲取當前片段的句柄?
- 28. 如何獲取對象內的對象?
- 29. Blackberry - 獲取當前應用程序的ApplicationDescriptor對象
- 30. 從Date對象中獲取時區 - Java
['pytz'文檔說'pytz。參考'](http://pytz.sourceforge.net/#problems-with-localtime)只能用於測試*。 – jfs
該警告適用於'reference.USTimeZone',它使用美國夏令時之前的2007年規則。然而,這裏使用的'reference.LocalTimezone'探測'time.localtime'的行爲,其正確性由系統庫維護。 'reference.LocalTimezone'給出了2007年美國規則變更之前和之後的正確DST轉換;我沒有測試過其他國家。 – rob
@rob:**錯誤**。不要使用'LocalTimezone()'。 'pytz'提供*歷史*時區數據,而'time.timezone','time.altzone'(由'LocalTimezone()'使用)是常量,即它們最多反映*最新的時區定義。當地時區在過去/未來可能會有不同的utc偏移量,例如,在2010 - 2015年嘗試歐洲/莫斯科時區,看看您自己會發生什麼。 – jfs