2012-07-09 110 views
8
Mon Jul 09 09:20:28 +0000 2012 

如果我有一個像這樣的格式作爲STRING,我怎麼能把它變成一個unix時間戳?在Python中,如何將此格式轉換爲unix時間戳?

注:

https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitter

+0

您需要解析它:http://docs.python.org/library/datetime.html#strftime-strptime-behavior – Blender 2012-07-09 20:16:13

+0

請參閱http://devpython.com/2011/08/11/convert -utc-date-string-to-unix-timestamp/ – 2012-07-09 20:18:56

+0

@Blender:OP的格式似乎很棘手。對於'+ 0000',他需要'%z',但是會導致'ValueError:'z'格式爲'%a%b%d%H:%M:%S%z%Y''''的指令不正確 – ThiefMaster 2012-07-09 20:22:49

回答

1

datetime.strptime()

參考:我從Twitter的API獲得這個格式http://docs.python.org/library/time.html#time.strptime

+0

所以,爲什麼不包括一些實際解析格式的示例代碼沒有錯誤使用? – ThiefMaster 2012-07-09 20:20:50

+0

然後你需要轉換爲Unix時間戳...看到http://stackoverflow.com/questions/2775864/python-datetime-to-unix-timestamp @thiefmaster ...我認爲,希望的答案足以讓他他想成爲什麼樣的人,以及讓他知道其他格式 – 2012-07-09 20:21:03

+0

@JoranBeasley:看到我對這個問題的評論。他的格式顯然不能解析。 – ThiefMaster 2012-07-09 20:24:40

8

最好的選擇是使用dateutil.parser.parse()它給你一個datetime帶有適當時區信息的對象:

>>> import dateutil.parser 
>>> dt = dateutil.parser.parse('Mon Jul 09 09:20:28 +0200 2012') 
>>> dt 
datetime.datetime(2012, 7, 9, 9, 20, 28, tzinfo=tzoffset(None, 7200)) 

現在你只需要把它轉換成UNIX時間戳:使用email.utils.parsedate_tz

>>> import time 
>>> int(time.mktime(dt.timetuple())) 
1341822028 

你擁有的格式也可以輕鬆解析:

>>> import datetime 
>>> import email.utils 
>>> parts = email.utils.parsedate_tz('Mon Jul 09 09:20:28 +0200 2012') 
>>> dt = datetime.datetime(*parts[:6]) - datetime.timedelta(seconds=parts[-1]) 
>>> str(dt) 
'2012-07-09 07:20:28' 

這實際上是如何在Python 3.3中實現email.utils.parsedate_to_datetime(如果您想複製&將其粘貼到您的項目中,請將re將__parsedate_tzparsedate_tzemail.utils):

def parsedate_to_datetime(data): 
    if not data: 
     return None 
    *dtuple, tz = __parsedate_tz(data) 
    if tz is None: 
     return datetime.datetime(*dtuple[:6]) 
    return datetime.datetime(*dtuple[:6], 
      tzinfo=datetime.timezone(datetime.timedelta(seconds=tz))) 
1

如果時區被稱爲是永遠+0000,你可以使用:

time.strptime('Mon Jul 09 09:20:28 +0000 2012', '%a %b %d %H:%M:%S +0000 %Y') 

這返回datetime結構。如果您需要紀元以來)UNIX秒,通過time.mktime(運行,像這樣的:如果

>>> time.mktime(time.strptime('Mon Jul 09 09:20:28 +0000 2012', '%a %b %d %H:%M:%S +0000 %Y')) 
1341818428.0 

或time.gmtime()確實是時區爲UTC始終。