Python:将复杂的日期时间字符串转换为时间戳

2 投票
2 回答
4702 浏览
提问于 2025-04-18 18:34

我想知道怎么把这个日期格式

"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”这样的表达方式,你可以选择以下两种方法:

  1. 把“昨天”、“yester-day”、“yday”等变体替换成“25/08/2014”(或者其他合适的日期),然后在新的字符串上使用parse

  2. 使用另一个库来解析这个字符串。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就可以很容易地按照上面描述的方法转换成时间戳了。

撰写回答