时间日期格式在python中不匹配

时间:2019-12-22 19:29:19

标签: python datetime

我想从CSV文件的时间戳列中提取日期。但是显示错误:( time data '1/29/2019 3:30:00.000000000 PM'与格式'%m/%d/%Y %I:%M:%S.%f %p')不匹配。

datetime.strptime(my_string,"%m/%d/%Y %I:%M:%S.%f %p")

我已附上CSV文件的屏幕截图。

csv file screenshot

2 个答案:

答案 0 :(得分:2)

您收到错误消息,因为%f期望最大为6位数字。

  

与strptime()方法一起使用时,%f伪指令接受右边的1到6位数字和零填充。 %f是对C标准格式字符集的扩展(但在日期时间对象中单独实现,因此始终可用)。

但是在您的示例中,有9个零。

一种解决方法是将格式字符串设置为三个0。

>>> x
'1/29/2019 3:30:00.000000000 PM'
>>> datetime.strptime('1/29/2019 3:30:00.000000000 PM', '%m/%d/%Y %H:%M:%S.%f000 %p')
datetime.datetime(2019, 1, 29, 3, 30)
>>> datetime.strptime('1/29/2019 3:30:00.000000000 PM', '%m/%d/%Y %I:%M:%S.%f000 %p')
datetime.datetime(2019, 1, 29, 15, 30)

答案 1 :(得分:0)

请尝试以下操作:

datetime.strptime(my_string,"%m/%d/%Y %H:%M:%S.%f %p")

这是您具体情况的更详细说明:

  

%I =小时(12小时制),为零填充的十进制数字。 01,02,…,   12
  %H =小时(24小时制),为零填充的十进制数字。 00、01,   …,23

由于您使用的是%I ,因此在您的输入文件提供24小时时钟格式时,您的代码将引发错误。

更改为%H 应该可以解决该错误。

以下是Python 2完整strptime语法的链接:
https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

和Python 3:
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

修改
%f可以使用微秒(6个零),但您可以使用9。
由于四舍五入的问题,我的建议是从您的电话号码中切出最后3位数字。

这是一个可能的解决方案:

from datetime import datetime
my_string = "1/29/2019 3:30:00.000000000 PM"
my_string_split = my_string.split()
my_string = my_string_split[0] + " " + my_string_split[1][:-3] + " " + my_string_split[2]
print (datetime.strptime(my_string,"%m/%d/%Y %I:%M:%S.%f %p") )

输出

2019-01-29 15:30:00