时间数据与格式不匹配

时间:2014-07-29 12:48:20

标签: python datetime

我收到以下错误:

time data '07/28/2014 18:54:55.099000' does not match format '%d/%m/%Y %H:%M:%S.%f'

但我看不出%d/%m/%Y %H:%M:%S.%f中哪个参数错误了?

这是我使用的代码。

from datetime import datetime
time_value = datetime.strptime(csv_line[0] + '000', '%d/%m/%Y %H:%M:%S.%f')

我添加并删除了000,但我收到同样的错误。

8 个答案:

答案 0 :(得分:58)

您有月交换日期:

'%m/%d/%Y %H:%M:%S.%f'

28永远不会适合%m月份参数的范围。

以正确的顺序解析%m%d

>>> from datetime import datetime
>>> datetime.strptime('07/28/2014 18:54:55.099000', '%m/%d/%Y %H:%M:%S.%f')
datetime.datetime(2014, 7, 28, 18, 54, 55, 99000)

您不需要添加'000'; %f可以正确解析较短的数字:

>>> datetime.strptime('07/28/2014 18:54:55.099', '%m/%d/%Y %H:%M:%S.%f')
datetime.datetime(2014, 7, 28, 18, 54, 55, 99000)

答案 1 :(得分:13)

虽然上述答案100%有用且正确,但我想添加以下内容,因为只有上述答案的组合和通过pandas doc阅读才能帮助我:

2位/ 4位数年

值得注意的是,为了解析一个2位数的年份,例如, ' 90'而不是' 1990',需要%y而不是%Y

自动推断日期时间

如果使用预定义格式进行解析仍然不适合您,请尝试使用标记infer_datetime_format=True,例如:

yields_df['Date'] = pd.to_datetime(yields_df['Date'], infer_datetime_format=True)

请注意,此解决方案比使用预定义格式慢。

答案 2 :(得分:7)

无需使用日期时间库。使用dateutil库,不需要任何格式:

>>> from dateutil import parser
>>> s= '25 April, 2020, 2:50, pm, IST'
>>> parser.parse(s)
datetime.datetime(2020, 4, 25, 14, 50)

答案 3 :(得分:3)

我遇到了一个很难解决的情况。这与特定问题并不完全相关,但是当向strptime提供时区信息时,可能会帮助寻求解决相同错误消息的人。就我而言,抛出的原因

ValueError:时间数据'2016-02-28T08:27:16.000-07:00'与格式'%Y-%m-%dT%H:%M:%S.%f%不匹配z'

是时区部分的最后一个冒号。在某些语言环境(例如,俄语)中,代码可以很好地执行,而在其他语言环境(例如,英语)中,则失败了。删除最后一个冒号有助于纠正我的处境。

答案 4 :(得分:1)

我也有类似的错误 -

time data '01-07-2020' does not match format '%d%m%Y' (match)

我不知道我必须在格式参数中使用连字符。这对我有用 -

df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')

答案 5 :(得分:0)

要比较日期时间,您可以试试这个。日期时间格式可以更改

from datetime import datetime

>>> a = datetime.strptime("10/12/2013", "%m/%d/%Y")
>>> b = datetime.strptime("10/15/2013", "%m/%d/%Y")
>>> a>b
False

答案 6 :(得分:0)

我有完全相同的错误,但是格式和根本原因略有不同,并且由于这是当您搜索“时间数据与格式不匹配”​​时弹出的第一个问与答,所以我认为我会留下错误我为未来的观众打造:

我的初始代码:

start = datetime.strptime('05-SEP-19 00.00.00.000 AM', '%d-%b-%y %I.%M.%S.%f %p')

我在其中使用%I来解析小时,在%p中来解析“ AM / PM”。

错误:

ValueError:时间数据'05 -SEP-19 00.00.00.000000 AM'与格式'%d-%b-%y%I.%M.%S.%f%p'不匹配

我经历了datetime docs并最终以12小时制%I实现,没有00 ...一旦我将00.00.00更改为12.00.00,问题已解决。

因此,使用%I%p是01-12,或者使用%H是00-23。

答案 7 :(得分:-2)

您只需从字符串中删除“/”并将“,”放入其中.. Boom

查看以下代码:

import datetime as dt
str = '01,01,2017'
datetime_value = dt.datetime.strptime(str,'%d,%m,%Y')
print(datetime_value) # prints: 2017-01-01 00:00:00