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

kru*_*ita 2 python datetime timestamp

我想知道如何转换这种日期格式

"Thu 21st Aug '14, 4:58am" 
Run Code Online (Sandbox Code Playgroud)

到Python的时间戳?

我需要转换的另一种格式:

"Yesterday, 7:22am"
Run Code Online (Sandbox Code Playgroud)

我尝试解析util没有成功...

Ale*_*ley 7

如果您还没有这样做,请查看parse函数dateutils.parser以解析表示日期的字符串...

>>> from dateutil.parser import parse
>>> dt = parse("Thu 21st Aug '14, 4:58am")
>>> dt
datetime.datetime(2014, 8, 21, 4, 58)
Run Code Online (Sandbox Code Playgroud)

...然后要将datetime对象转换为时间戳,您可以执行以下操作:

>>> import time
>>> import datetime
>>> time.mktime(dt.timetuple())
1408593480.0
Run Code Online (Sandbox Code Playgroud)

作为旁注,parse是一个有用的功能,可以识别各种不同的日期格式.然而,它有时有用了,并且可能会看到可能不是日期的日期:

>>> parse("14, m 23")
datetime.datetime(2014, 8, 23, 0, 14)
Run Code Online (Sandbox Code Playgroud)

如果你还想解析诸如"昨天,早上7:22"之类的表达式,你可以做以下两件事之一:

  1. 将"昨天","yester-day","yday"和其他变体替换为"25/08/2014"(或其他适当的日期),然后parse在新字符串上使用.

  2. 使用另一个库来解析字符串.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)
Run Code Online (Sandbox Code Playgroud)

要将此日期表示形式d转换为datetime对象,可以像这样解压缩元组:

>>> dt = datetime.datetime(*d[0][:7])
>>> dt
datetime.datetime(2014, 8, 25, 7, 22)
Run Code Online (Sandbox Code Playgroud)

现在dt可以通过上述方式轻松转换为时间戳.