假設我有一個像「2009-08-18 13:52:54-04」的時區。我可以使用像這樣的一行來解析它的大部分內容:如何在Python中使用UTC偏移量解析時區?
datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S")
但是,我無法獲得工作時區。有%Z處理文本時區(「EST」,「UTC」等),但我沒有看到任何可以解析「-04」的東西。
假設我有一個像「2009-08-18 13:52:54-04」的時區。我可以使用像這樣的一行來解析它的大部分內容:如何在Python中使用UTC偏移量解析時區?
datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S")
但是,我無法獲得工作時區。有%Z處理文本時區(「EST」,「UTC」等),但我沒有看到任何可以解析「-04」的東西。
我遇到同樣的問題,最近運行和使用此代碼周圍工作:
gmt_offset_str = time_string[-3:]
gmt_offset_seconds = int(gmt_offset_str)*60*60
timestamp = time.strptime(time_string[:-4], '%Y-%m-%d %H:%M:%S')
return time.localtime(time.mktime(timestamp)-gmt_offset_seconds)
我也有興趣在一個更優雅的解決方案。
你可以做到這一點directrly在構造函數:class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[,
tzinfo]]]]])
,tzinfo是一個datetime.tzinfo
dervided對象。
tzinfo是一個抽象基類,意味着這個類不應該直接實例化。您需要派生一個具體的子類,並且(至少)提供您使用的日期時間方法所需的標準tzinfo方法的實現。日期時間模塊不提供任何具體的tzinfo子類。
你需要覆蓋的是utcoffset(self, dt)
方法。
返回UTC以UTC爲單位的本地時間偏移量。如果當地時間在UTC以西,則應該是負值。請注意,這應該是UTC的總偏移量;例如,如果tzinfo對象同時表示時區和DST調整,則utcoffset()應返回它們的總和。如果UTC偏移量未知,則返回無。否則,返回的值必須是一個timedelta對象,指定在-1439至1439(含)範圍內的整數分鐘數(1440 = 24 * 60;偏移量的大小必須小於一天)。 UTCOFFSET的大多數實現()可能會看起來像這兩個中的一個:
return CONSTANT # fixed-offset class
return CONSTANT + self.dst(dt) # daylight-aware class
如果UTCOFFSET()不返回None,DST()不應該要麼返回無。
utcoffset()的默認實現引發NotImplementedError。
也許你可以用dateutil.parser.parse?該方法也在wiki.python.org/WorkingWithTime上提及。
>>> from dateutil.parser import parse
>>> parse("2009-08-18 13:52:54-04")
datetime.datetime(2009, 8, 18, 13, 52, 54, tzinfo=tzoffset(None, -14400))
(是這個問題重複?)
之前的dateutil中有+1。這是你的答案 – Yarin 2012-03-01 14:53:38
Dupe- [如何翻譯了ISO 8601的時間字符串轉換爲Python的datetime對象?(http://stackoverflow.com/questions/969285/how-do-i-translate-a-iso-8601-datetime-string-into-a-python-datetime-object/3908349)(並且答案是'dateutil.parser。解析(日期字符串)'在兩個) – Yarin 2012-03-01 15:05:32
相關:[如何在python中用-0400時區字符串解析日期?](http://stackoverflow.com/q/1101508/4279) – jfs 2014-04-17 01:36:09