这是我的代码:
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'
(因此可以工作)?
答案 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)