9
Mon Jul 09 09:20:28 +0000 2012

如果我有这样的格式作为字符串,我怎么能把它变成一个 unix 时间戳?

注意:我从 Twitter 的 API 获得这种格式:

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

4

3 回答 3

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 时间戳:

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

您拥有的格式也可以使用以下方法轻松解析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'

这实际上是email.utils.parsedate_to_datetimePython 3.3 中的实现方式(如果您想将其复制并粘贴到您的项目中,请替换__parsedate_tzparsedate_tzfrom 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)))
于 2012-07-09T20:32:00.700 回答
1

如果已知时区始终为 +0000,则可以使用:

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

这将返回一个日期时间结构。如果您需要自纪元以来的 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。

于 2012-07-09T20:33:24.853 回答
0

datetime.strptime()

参考http ://docs.python.org/library/time.html#time.strptime

于 2012-07-09T20:17:09.167 回答