使用datetime.strptime进行故障排除'ValueError:时间数据...与格式不匹配'

时间:2010-03-17 06:19:56

标签: python strptime

我的输入字符串是'16-MAR-2010 03:37:04',我想将其存储为日期时间。

我正在尝试使用:

db_inst.HB_Create_Ship_Date = datetime.strptime(fields[7]," %d-%b-%Y %H:%M:%S ") 
fields[7] = '16-MAR-2010 03:37:04' 

我收到错误:

::ValueError: time data '16-MAR-2010 03:37:04' does not match format ' %d-%b-%Y %H:%M:%S ' 

4 个答案:

答案 0 :(得分:4)

编辑:
作为John mentions,让自己更容易,并删除前导和尾随空格。

另一个想法:
您当前的locale可能不会将“MAR”指定为月份缩写。

此代码的输出是什么?:

import locale
locale.getdefaultlocale()

我在Linux机器上测试了你的代码(Ubuntu 9.10,Python 2.6.4)并得到了ValueError。
我删除了空格,更改为非英语语言环境(捷克语),并获得了ValueError。

学术说明:
奇怪的是,您的代码适用于Windows XP Python 2.5.5以及无关的空格:

>>> from datetime import datetime
>>> dt = '16-MAR-2010 03:37:04'
>>> datetime.strptime(dt, " %d-%b-%Y %H:%M:%S ")
datetime.datetime(2010, 3, 16, 3, 37, 4)

答案 1 :(得分:2)

丢失格式正面和背面的空格。我认为strptime记录的变化取决于为你的盒子编写C运行时的人的想法。但似乎我错了。这意味着Python中存在一个错误。

Windows上的Python 2.6.4不喜欢前导尾随空格;见下文。

* x用户,你发现了什么?

与此同时,使用最小公分母 - 丢失空格。正如亚当所提到的,你可能还有一个语言环境问题。

有空格:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04'," %d-%b-%Y %H:%M:%S ")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\python26\lib\_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '16-MAR-2010 03:37:04' does not match format ' %d-%b-%Y %H
:%M:%S '

没有空格:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04',"%d-%b-%Y %H:%M:%S")
datetime.datetime(2010, 3, 16, 3, 37, 4)
>>>

答案 2 :(得分:2)

您的格式字符串有一个前导空格和一个尾随空格,但您的输入字符串没有。删除起始引号后和结束引号前的空格。

答案 3 :(得分:0)

试试这个:

db_inst.HB_Create_Ship_Date = datetime.strptime(fields[7],"%d-%b-%Y %H:%M:%S")

另外,在Python中使用look here作为DateTime格式的参考。