ins*_*get 8 format floating-point datetime python-2.7
我正在努力将人类可读时间转换为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'
Run Code Online (Sandbox Code Playgroud)
所以我认为这里的问题是一秒的分数是不可解析的.我真的不在乎那一秒钟.如果没有切割字符串,有没有办法让我datetime忽略一秒的分数(最好用格式)?
我有一种感觉,我可能会遗漏一些非常基本的东西.我很感激任何帮助.
因为我真的不关心一秒的分数,所以我应该只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)
Run Code Online (Sandbox Code Playgroud)
解决您的特定问题:使用 %f 表示微秒:
>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%S.%fZ")
Run Code Online (Sandbox Code Playgroud)
然而,对于一般情况来说,问题仍然存在。如果点后的数字超过 6 位,则此解决方案将不起作用。
问题是,据我所知, datetime.datetime.strptime 接受的格式一般不包括浮动秒。解决方法是在创建日期时间变量时忽略秒,然后使用 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)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
5452 次 |
| 最近记录: |