我在使用strptime时收到错误,但是当我手动输入日期时它会起作用

时间:2013-09-28 18:09:52

标签: python datetime

这是我的代码:

def updateUserDBDates():
    global userDB, currentDate, previousDate, changeInDate

    index = 0
    index2 = 0

    userDB[1] = datetime.strptime(userDB[0], "%d-%m-%Y")
    userDB[0] = datetime.strftime(datetime.today(), "%d-%m-%Y")
    userDB[0] = datetime.strptime(userDB[0], "%d-%m-%Y")

    saveData()

    currentDate = userDB[0]
    previousDate = userDB[1]
    changeInDate = currentDate - previousDate

这是我收到的错误:

  File "/home/nathan/Documents/project001/programFiles/Project 001.py", line 170, in updateUserDBDates
    userDB[1] = datetime.strptime(userDB[0], "%d-%m-%Y")
  File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '2013-09-28 00:00:00' does not match format '%d-%m-%Y'

代码是否应该生成时间数据'28-09-2013'(因此可以工作)?

1 个答案:

答案 0 :(得分:2)

strptime必须完全匹配;它不能做部分匹配。你应该使用

datetime.datetime.strptime('2013-09-28 00:00:00', "%Y-%m-%d %H:%M:%S")
#>>> datetime.datetime(2013, 9, 28, 0, 0)

请注意,如果您使用的是"%Y-%m-%d",而不是错误的"%d-%m-%Y",那么您可能会收到更多信息错误:

ValueError: unconverted data remains:  00:00:00

如果您真的只想匹配开头,可以使用re预处理数据:

yyyymmdd = re.search('\d\d\d\d-\d\d-\d\d', '2013-09-28 00:00:00').group()
datetime.datetime.strptime(yyyymmdd, "%Y-%m-%d")
#>>> datetime.datetime(2013, 9, 28, 0, 0)

或者,如果您想要这一天但知道整个格式,则可以使用date方法:

datetime.datetime.strptime('2013-09-28 12:04:43', "%Y-%m-%d %H:%M:%S").date()
#>>> datetime.date(2013, 9, 28)