无法将时间字符串从csv转换为datetime

2024-09-28 19:02:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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小时格式


Tags: csvinpyformatdatadatetimetimeline
3条回答

您以错误的顺序提供参数。首先需要输入日期字符串,然后输入格式字符串

我认为这对于{}而不是{}这样的例子有效的原因是{}的小时数应该在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')

相关问题 更多 >