在Python中,如何将此格式转换为unix时间戳?

TIM*_*MEX 8 python date

Mon Jul 09 09:20:28 +0000 2012
Run Code Online (Sandbox Code Playgroud)

如果我有一个像STRING那样的格式,我怎么能把它变成一个unix时间戳呢?

注意:我从Twitter的API获取此格式:

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

Thi*_*ter 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))
Run Code Online (Sandbox Code Playgroud)

现在您只需将其转换为UNIX时间戳:

>>> import time
>>> int(time.mktime(dt.timetuple()))
1341822028
Run Code Online (Sandbox Code Playgroud)

您可以使用email.utils.parsedate_tz以下方式轻松解析您的格式:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

这实际上是如何email.utils.parsedate_to_datetime在Python 3.3中实现(如果你想复制和粘贴到您的项目,替换__parsedate_tzparsedate_tz来自email.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)))
Run Code Online (Sandbox Code Playgroud)