日期时间格式不匹配

时间:2013-06-24 20:54:41

标签: python

我有一个整数秒的日期时间对象(例如:2010-04-16 16:51:23)。我使用以下命令来提取确切的时间

dt = datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S.%f

(一般来说,我有小数(例如:2010-04-16 16:51:23.1456),但有时我没有。所以当我运行此命令时,我收到一条错误消息

ValueError: time data '2010-04-16 16:51:23' does not match format '%Y-%m-%d %H:%M:%S.%f'

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

这是因为您没有指定的格式。您的格式为:

'%Y-%m-%d %H:%M:%S'

有多种解决方案。首先,始终以相同的格式生成数据(如果需要,添加.00)。

第二个解决方案是您try以一种格式解码,如果失败,则使用其他格式进行解码:

try:
    dt = datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S.%f')
except ValueError:
    dt = datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S')

答案 1 :(得分:0)

避免使用异常处理机制的另一种方法是默认该字段(如果不存在)并尝试使用一个格式字符串进行处理:

from datetime import datetime

s = '2010-04-16 16:51:23.123'
dt, secs = s.partition('.')[::2]
print datetime.strptime('{}.{}'.format(dt, secs or '0'), '%Y-%m-%d %H:%M:%S.%f')

答案 2 :(得分:0)

如果你使用最新的python(3.2 +)simple-date会为你做这样的事情:

>>> from simpledate import *
>>> SimpleDate('2010-04-16 16:51:23.1456')
SimpleDate('2010-04-16 16:51:23.145600', tz='America/Santiago')
>>> SimpleDate('2010-04-16 16:51:23')
SimpleDate('2010-04-16 16:51:23', tz='America/Santiago')

它通过扩展python模板格式来工作。所以你也可以写(这是不需要的,因为默认情况下会处理类似ISO8601的格式):

>>> SimpleDate('2010-04-16 16:51:23', format='Y-m-d H:M:S(.f)?')
SimpleDate('2010-04-16 16:51:23', tz='America/Santiago')

查看小数秒如何像{regexp一样{ - 1}} - 意味着它是可选的(如果没有,它会添加%符号)。

PS,您可以通过属性访问日期时间。如果你想丢弃tzinfo(默认情况下取自语言环境 - 我住在智利,因此上面是(.f)?)来获得一个天真的日期时间:

America/Santiago