时间数据与格式不匹配

我得到以下错误:

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')

I have added and removed the 000 but I get the same error.

531270 次浏览

你把日期和月份交换了:

'%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)

要比较日期时间,可以尝试这样做。可以更改日期时间格式

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

虽然上面的答案是100% 有用和正确的,我想补充以下内容,因为只有结合上述答案和通过阅读熊猫文档帮助我:

2位数字/4位数字的年份

值得注意的是,要解析一个两位数的年份,例如’90’而不是’1990’,需要使用 %y而不是 %Y

Infer the datetime automatically

如果使用预定义格式的解析仍然不适合您,可以尝试使用标志 infer_datetime_format=True,例如:

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

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

我遇到过一个很难解决的案子。这与特定的问题并不完全相关,但是当 strptime 被提供时区信息时,这可能有助于寻找解决具有相同错误消息的情况的人。在我的情况下,投掷的原因

ValueError: time data’2016.02-28T08:27:16.000-07:00’不匹配格式’% Y -% m -% dT% H:% M:% S.% f% z’

是时区最后一个结肠的存在。虽然在一些地区(例如俄罗斯地区)代码能够很好地执行,但是在另一些地区(英国地区)代码却失败了。切除最后一个结肠有助于改善我的状况。

不需要使用 datetime 库。使用 dateutil 库不需要任何格式:

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

我也犯了同样的错误,只是格式和根本原因略有不同。由于这是你搜索“时间数据不符合格式”时弹出的第一个问答,我想我应该把我犯的错误留给未来的观众:

我的初始代码是:

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-1900.00.00.000000 AM”与格式“% d -% b -% y% I.% M.% S.% f% p”不匹配

我正在通过的 日期时间文件,最后实现在12小时的格式 %I,没有00... 一旦我把 00.00.00改成 12.00.00,问题就解决了。

So it's either 01-12 using %I with %p, or 00-23 using %H.

我也犯过类似的错误

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

我不知道在 format 参数中必须使用连字符

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

你只需要从字符串中删除“/”,然后把“ . . 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

我也有同样的错误,时间数据“09/24/1997”与格式“% m -% d -% Y”不匹配

如果您的日期使用 /,那么也使用您的格式的 /,例如

“09/24/1997” = > 使用破折号的 “% m/% d/% Y”将会给出这个错误。

Lets say we have datetime format string form with below format.
 

2018-01-31T09:24:31.488670+00:00


We can convert this given datetime str to datetime object


 



Import datetime
    

DatetImeObj = datetime.datetime.strptime('2018-01-31T09:24:31.488670+00:00', '%Y-%m-%dT%H:%M:%S.%f%z')


 



This will return datetime format with result
2018-01-31 09:24:31.488670+00:00
     

Now if you want to convert this date time in any format you can use any datetime function


 



finalDateTime = Datetime.datetime.strftime(DatetImeObj , ‘%Y-%m-%d %H:%M’)


output -  2018-01-31 09:24