解决使用datetime.strptime时遇到的'ValueError: time data ... 与格式不匹配'问题

1 投票
4 回答
12715 浏览
提问于 2025-04-15 20:30

我的输入字符串是 '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 个回答

2

去掉你格式前后的空格。我原以为strptime的表现会因为你电脑上C运行时的不同而有所不同,但看来我错了。这意味着Python可能有个bug。

在Windows上的Python 2.6.4不喜欢前后有空格的情况;具体情况见下文。

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

在此期间,使用最简单的方法——去掉空格。你可能还有地区设置的问题,正如Adam提到的。

有空格的情况:

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

你的格式字符串前面和后面都有空格,但你的输入字符串没有。把开始引号后面的空格和结束引号前面的空格去掉。

4

编辑:
正如约翰提到的,为了简化操作,建议你去掉字符串前后的空格。

另一个想法:
你当前的区域设置可能没有将“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)

撰写回答