python datetime.strTime:忽略一秒的小数

python datetime.strTime:忽略一秒的小数,datetime,floating-point,format,python-2.7,Datetime,Floating Point,Format,Python 2.7,我正在将人类可读的时间转换为datetime对象。为此,我使用了datetime.datetime.strtime 然而,很简单,我所拥有的人类可读时间包含了几分之一秒,这是我无法解析的。如果这是一个常量,我可以将其合并为格式的一部分。然而,由于它不是一个常数,我不能这样做 这就是我现在正在做的: >>> humanTime = '2012/06/10T16:36:20.509Z' >>> datetime.datetime.strptime(humanTim

我正在将人类可读的时间转换为
datetime
对象。为此,我使用了
datetime.datetime.strtime

然而,很简单,我所拥有的人类可读时间包含了几分之一秒,这是我无法解析的。如果这是一个常量,我可以将其合并为格式的一部分。然而,由于它不是一个常数,我不能这样做

这就是我现在正在做的:

>>> 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'
humanTime='2012/06/10T16:36:20.509Z' >>>datetime.datetime.StrTime(humanTime,“%Y/%m/%dT%H:%m:%SZ”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“lib/python2.7/_strptime.py”,第325行,在_strptime中 (数据字符串,格式)) ValueError:时间数据“2012-06-10T16:36:20.507Z”与格式“%Y-%m-%dT%H:%m:%SZ”不匹配 所以我认为这里的问题是,一秒钟的分数是不可解析的。我真的不在乎那一分一秒。除了对字符串进行切片之外,是否有一种方法可以让
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)

特定问题的解决方案:将%f用于微秒:

>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%S.%fZ")
然而,一般情况下,问题仍然存在。如果圆点后的数字超过6位,则此解决方案将不起作用

问题是,据我所知,datetime.datetime.StrTime接受的格式通常不包括浮动秒。解决方法是在创建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)

希望这有帮助。

指令
%f
将解释分数秒:

导入日期时间
humanTime='2012/06/10T16:36:20.509Z'
datetime.datetime.StrTime(人类时间,“%Y/%m/%dT%H:%m:%S.%fZ”)
>>datetime.datetime(2012,6,10,16,36,20509000)
熊猫还可以用小数秒解析字符串

将熊猫作为pd导入
humanTime='2012/06/10T16:36:20.509Z'
pd.to_日期时间(人工时间)
>>时间戳('2012-06-10 16:36:20.509000+0000',tz='UTC')

@downvoter:您想告诉我为什么我的问题不好吗?您可以使用
%f
解析分数秒