我有一个csv文件,每行有2个时间戳,包括日期、时间和值:
02.04.2019 00:30:30;02.04.2019 00:36:05;6354
02.04.2019 02:36:05;02.04.2019 03:41:40;3453
02.04.2019 03:41:40;02.04.2019 04:47:15;5456
当我尝试将日期和时间字符串转换为datetime时:
with open("file.csv", "rt", encoding='utf-8-sig') as source:
reader = csv.reader(source)
for row in csv.reader(source, delimiter=";"):
dateTimeBegin = row[0]
dateTimeEnd = row[1]
begin_intervall = datetime.datetime.strptime("%d.%m.%Y %I:%M:%S", dateTimeBegin)
end_intervall = datetime.datetime.strptime("%d.%m.%Y %I:%M:%S", dateTimeEnd)
我得到:
Traceback (most recent call last):
File ".\compare.py", line 48, in <module>
begin_intervall = datetime.datetime.strptime("%d.%m.%Y %I:%M:%S", dateTimeBegin)
File "C:\Users\foobar\AppData\Local\Programs\Python\Python38-32\lib\_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "C:\Users\foobar\AppData\Local\Programs\Python\Python38-32\lib\_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '%d.%m.%Y %I:%M:%S' does not match format '02.04.2019 00:30:30'
为什么呢?当我尝试像
date_time_str ="08.04.2018 05:35:38"
date_time_obj = datetime.datetime.strptime(date_time_str, '%d.%m.%Y %I:%M:%S')
它很好用
编辑: 我交换了格式和时间字符串,并使用了一些其他数据:
02.04.2019 01:30:30;02.04.2019 02:36:05;6354 #works
02.04.2019 02:36:05;02.04.2019 03:41:40;3453 #works
02.04.2019 03:41:40;02.04.2019 04:47:15;5456 #works
03.04.2019 00:25:03;03.04.2019 01:30:12;5997 #ERROR
03.04.2019 01:30:12;03.04.2019 02:35:21;5993
03.04.2019 02:35:21;03.04.2019 03:40:30;5994
错误仍然是:
Traceback (most recent call last):
File ".\new.py", line 12, in <module>
begin_intervall = datetime.datetime.strptime(dateTimeBegin, "%d.%m.%Y %I:%M:%S")
File "C:\Users\foobar\AppData\Local\Programs\Python\Python38-32\lib\_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "C:\Users\foobar\AppData\Local\Programs\Python\Python38-32\lib\_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '03.04.2019 00:25:03' does not match format '%d.%m.%Y %I:%M:%S'
好像是00:25:03。但是%I是24小时格式
您以错误的顺序提供参数。首先需要输入日期字符串,然后输入格式字符串
我认为这对于{}而不是{}这样的例子有效的原因是{}的小时数应该在0到23之间,而{}的小时数应该在1到12之间,你可以找到这个{a1}的表。这是因为
%H
表示24小时格式的小时,而%I
表示12小时格式的小时要解决这个问题,您应该将格式字符串设置为
'%d.%m.%Y %H:%M:%S'
,而不是'%d.%m.%Y %I:%M:%S'
顺便说一句,如果您是记录这些时间戳的人,因此可以控制它们的记录方式,我建议改用Unix Timestamps。这是因为它们更容易来回转换,并且不会对这些时间戳的时区产生歧义。但是,如果您决定这样做,请确保在实际将
datetime
对象作为unix时间戳保存到CSV文件之前对其进行本地化This这个问题有很多很好的例子来说明你是如何做到这一点的根据日期时间docs
函数定义为
datetime.strptime(date_string, format)
这意味着第一个参数将是日期字符串
(02.04.2019 01:30:30)
或变量dateTimeBegin
,第二个参数将是格式字符串('%d.%m.%Y %I:%M:%S')
相关问题 更多 >
编程相关推荐