我想將字符串時間戳轉換成適當的日期時間對象。我遇到的問題是存在時區偏移,我所做的一切似乎都不起作用。將字符串時間戳(帶時區偏移量)轉換爲本地時間。 。 ? python
最終我想將字符串時間戳轉換爲我的計算機時區中的日期時間對象。
# string timestamp
date = u"Fri, 16 Jul 2010 07:08:23 -0700"
我想將字符串時間戳轉換成適當的日期時間對象。我遇到的問題是存在時區偏移,我所做的一切似乎都不起作用。將字符串時間戳(帶時區偏移量)轉換爲本地時間。 。 ? python
最終我想將字符串時間戳轉換爲我的計算機時區中的日期時間對象。
# string timestamp
date = u"Fri, 16 Jul 2010 07:08:23 -0700"
的dateutil包是非常方便的解析日期/時間:
In [10]: date = u"Fri, 16 Jul 2010 07:08:23 -0700"
In [11]: from dateutil.parser import parse
In [12]: parse(date)
Out[12]: datetime.datetime(2010, 7, 16, 7, 8, 23, tzinfo=tzoffset(None, -25200))
最後,轉換到本地時區,
In [13]: parse(date).astimezone(YOUR_LOCAL_TIMEZONE)
我該如何把它變成符合我當前時區的時間表示? 並感謝那btw :) – alfredo 2010-07-20 03:57:44
很高興提供幫助。您可以使用parse返回的datetime對象的'astimezone'方法。看到這個問題的細節:http://stackoverflow.com/questions/79797/how-do-i-convert-local-time-to-utc-in-python – ars 2010-07-20 04:13:14
Dateutil岩石!解析我的字符串(「2013-10-22T21:56:00.000-03:00」),而不必提供格式字符串。 – fccoelho 2013-10-23 11:29:35
看起來datetime.datetime.strptime(d, '%a, %d %b %Y %H:%M:%S %z')
應該工作,但根據到this bug report處理有%z
問題。所以,你可能要處理你自己的時區:
import datetime
d = u"Fri, 16 Jul 2010 07:08:23 -0700"
d, tz_info = d[:-5], d[-5:]
neg, hours, minutes = tz_info[0], int(tz_info[1:3]), int(tz_info[3:])
if neg == '-':
hours, minutes = hours * -1, minutes * -1
d = datetime.datetime.strptime(d, '%a, %d %b %Y %H:%M:%S ')
print d
print d + datetime.timedelta(hours = hours, minutes = minutes)
這裏有一個STDLIB解決方案:
>>> from datetime import datetime
>>> from email.utils import mktime_tz, parsedate_tz
>>> datetime.fromtimestamp(mktime_tz(parsedate_tz(u"Fri, 16 Jul 2010 07:08:23 -0700")))
datetime.datetime(2010, 7, 16, 16, 8, 23) # your local time may be different
又見,Python: parsing date with timezone from an email。
注意:如果本地時區在過去(2010年)和如果不在給定平臺上使用歷史時區數據庫,則本地時區具有不同的UTC偏移。要解決此問題,您可以使用tzlocal.get_localzone()
獲取代表您本地時區的pytz
tzinfo對象。 pytz
以便攜方式提供對tz數據庫的訪問:
>>> timestamp = mktime_tz(parsedate_tz(u"Fri, 16 Jul 2010 07:08:23 -0700"))
>>> import tzlocal # $ pip install tzlocal
>>> str(datetime.fromtimestamp(timestamp, tzlocal.get_localzone()))
'2010-07-16 16:08:23+02:00'
你可以發佈你到目前爲止的代碼嗎? – bstpierre 2010-07-20 03:38:20