-4

这是我的代码:

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'(因此可以工作)吗?

4

1 回答 1

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)
于 2013-09-28T18:11:37.990 回答