如何将日期字符串转换为DateTime对象?
我有以下日期:
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)