Mon Jul 09 09:20:28 +0000 2012
如果我将这样的格式作为STRING,我该如何将其转换为unix时间戳?
注意:我从Twitter的API获取此格式:
答案 0 :(得分: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'
这实际上是Python 3.3中email.utils.parsedate_to_datetime
的实现方式(如果您要将其复制并粘贴到项目中,请将__parsedate_tz
替换为parsedate_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)))
答案 1 :(得分:1)
datetime.strptime()
答案 2 :(得分: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。