2012-07-09 111 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始终。