如何将日期字符串转换为DateTime对象?

20 投票
3 回答
36260 浏览
提问于 2025-04-15 22:04

我有以下日期:

2005-08-11T16:34:33Z

我想知道这个日期是在2009年4月1日之前还是之后,但我找不到一个方法可以把这个字符串转换成可以和2009年4月1日进行有意义比较的格式。

3 个回答

0

如果你已经知道了日期和时间的字符串,可以直接使用datetime.datetime(year, month, day, hour, minute, second)这个函数。你只需要把你的字符串拆分开,得到合适的年、月、日、时、分、秒这些变量,然后放进去,就能把它变成日期时间类型。接着,你就可以和你需要比较的东西进行比较了。

或者,你也可以使用大家提到的ISO格式。

1

我建议你去看看这个链接:http://dateutil.readthedocs.io/en/stable/parser.html

from dateutil.parser import parse datetime = parse("Sat Oct 11 17:13:46 UTC 2003")

36

因为这个字符串是ISO格式的,所以可以直接和你提到的datetime的ISO格式版本进行有意义的比较:

>>> s='2005-08-11T16:34:33Z'
>>> t=datetime.datetime(2009,04,01)
>>> t.isoformat()
'2009-04-01T00:00:00'
>>> s < t
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't compare datetime.datetime to str
>>> s < t.isoformat()
True
>>> z='2009-10-01T18:20:12'
>>> z < t.isoformat()
False

正如你所看到的,虽然你不能直接把字符串和datetime对象进行比较,但只要字符串是ISO格式的,就可以用datetime对象的.isoformat()来比较它们。这就是ISO格式字符串表示日期和时间的好处:它可以正确地进行比较,并且在排序时也能正确处理作为字符串,而不需要转换成其他类型。

如果你想进行转换,当然也是可以的:

>>> datetime.datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ')
datetime.datetime(2005, 8, 11, 16, 34, 33)

撰写回答