我正在努力将人类可读时间转换为datetime
对象。为此,我使用datetime.datetime.strptime
。
然而,很简单,我所拥有的人类可读时间包含一小段时间,我无法解析。如果这是一个常数,我可以将其作为格式的一部分。但是,由于它不是一个常数,我无法这样做。
这就是我现在正在做的事情:
>>> humanTime = '2012/06/10T16:36:20.509Z'
>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%SZ")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lib/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data '2012-06-10T16:36:20.507Z' does not match format '%Y-%m-%dT%H:%M:%SZ'
所以我认为这里的问题是一秒的分数是不可解析的。我真的不在乎那一秒钟。如果没有切割字符串,我可以通过这种方式让datetime
忽略一秒的分数(最好是格式)吗?
我有一种感觉,我可能会遗漏一些非常基本的东西。我很感激任何帮助。
答案 0 :(得分:5)
因为我真的不关心一秒的分数,所以我应该只读取人类可读字符串的第一个19
字符,并在其上应用一个简单的格式。
>>> humanTime = '2012/06/10T16:36:20.509Z'
>>> datetime.datetime.strptime(humanTime[:19], "%Y/%m/%dT%H:%M:%S")
datetime.datetime(2012, 6, 10, 16, 36, 20)
答案 1 :(得分:3)
解决您的特定问题:使用%f表示微秒:
>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%S.%fZ")
然而,问题仍然存在于一般情况。如果您在点后面有超过6位数字,那么此解决方案将无法正常工作。
问题在于,据我所知,datetime.datetime.strptime接受的格式一般不包括浮动秒数。解决方法是在创建datetime变量时忽略秒,然后使用datetime.timedelta添加秒。
>>> import numpy as np
>>> import datetime
>>>
>>> humanTime = '2012/06/10T16:36:20.509Z'
>>> dt_time_no_seconds = datetime.datetime.strptime(humanTime[:-8], "%Y/%m/%dT%H:%M")
>>> seconds = np.float(humanTime[-7:-1])
>>> dt_time = dt_time_no_seconds+datetime.timedelta(seconds=seconds)
>>> dt_time_no_seconds
datetime.datetime(2012, 6, 10, 16, 36)
>>> dt_time
datetime.datetime(2012, 6, 10, 16, 36, 20, 509000)
希望这有帮助。
答案 2 :(得分:0)