Python:将复杂的日期时间字符串转换为时间戳
我想知道怎么把这个日期格式
"Thu 21st Aug '14, 4:58am"
转换成时间戳,用Python怎么做?
还有一种格式我也需要转换:
"Yesterday, 7:22am"
我试过用解析工具,但没有成功...
2 个回答
0
你可以使用这个:
a = "Thu 21st Aug '14, 4:58am"
datetime.datetime.strptime(a, '%a %dst %b \'%y, %H:%M%p')
7
如果你还没看过,可以先去看看dateutils.parser
里的parse
函数,它可以用来解析表示日期的字符串...
>>> from dateutil.parser import parse
>>> dt = parse("Thu 21st Aug '14, 4:58am")
>>> dt
datetime.datetime(2014, 8, 21, 4, 58)
...然后,如果你想把一个datetime
对象转换成时间戳,可以这样做:
>>> import time
>>> import datetime
>>> time.mktime(dt.timetuple())
1408593480.0
顺便提一下,parse
是个很有用的函数,它能识别很多不同的日期格式。不过,有时候它会过于“聪明”,把一些本来不应该是日期的内容也当成日期来看:
>>> parse("14, m 23")
datetime.datetime(2014, 8, 23, 0, 14)
如果你还想解析像“昨天,早上7:22”这样的表达方式,你可以选择以下两种方法:
把“昨天”、“yester-day”、“yday”等变体替换成“25/08/2014”(或者其他合适的日期),然后在新的字符串上使用
parse
。使用另一个库来解析这个字符串。parsedatetime就是一个选择...
下面是使用parsedatetime处理你这个例子的效果:
>>> import parsedatetime.parsedatetime as pdt
>>> p = pdt.Calendar()
>>> d = p.parse("Yesterday, 7:22am")
>>> d
((2014, 8, 25, 7, 22, 0, 0, 237, -1), 3)
要把这个日期表示d
转换成datetime
对象,你可以像这样解包这个元组:
>>> dt = datetime.datetime(*d[0][:7])
>>> dt
datetime.datetime(2014, 8, 25, 7, 22)
现在dt
就可以很容易地按照上面描述的方法转换成时间戳了。