如何在Python中为date时间值添加时间值?

我有一个简单的问题(至less我是这么认为的),我想在Python中为date时间值添加一个时间值。 这些值是从Excel文件中读取的。

我有以下代码:

import xlrd from datetime import time, datetime, timedelta book = xlrd.open_workbook('C:\\Users\eline\Documents\***\***\Python\Example 1.xlsx') sh = book.sheet_by_name("test") arr_time = datetime(*xlrd.xldate_as_tuple(sh.cell_value(1,2), book.datemode)) print(arr_time) a2 = sh.cell_value(1,5) # converting float from excel to time value print(int(a2*24*3600)) x = int(a2*24*3600) slack_time = time(x//3600, (x%3600)//60, x%60) print(slack_time) new_arr_time = arr_time + slack_time print(new_arr_time) 

arr_time在这里是一个可以改变的date时间值,例如:

 2016-08-28 13:10:00 

slack_time在这里是几分钟(有时几小时)的时间,可以改变,例如:

 00:15:00 

我想添加松弛时间(例如15分钟)到arr_time。 因此,对于这个例子,我想为new_arr_time得到以下输出:

 2016-08-28 13:25:00 

但是,运行我的代码时,出现以下错误:“TypeError:不支持的操作数types为+:'datetime.datetime'和'datetime.time'”。 从这里我明白我不能将时间值添加到date时间值,但是当将slack_time转换为date时间值,然后将slack_time添加到arr_time时,我会得到一个类似的错误(尽pipe这样做会减less工作量)。 我知道我可以使用timedelta(分钟= 15),但由于Excel文件的值有所不同,有时包含几个小时,这不适用于我。

所以我的问题是:我怎样才能添加一个从Excel中读取的时间值到date时间值?

你应该使用浮点值来build立一个持续时间的slack_time一个datetime.timedelta对象。 然后它可以被添加到datetime对象:

 >>> x = 0.010416666666666666 >>> timedelta(days=x) datetime.timedelta(0, 900) >>> 900/60 15 # the fifteen minutes you had earlier 

所以你的代码变成:

 from datetime import datetime, timedelta new_arr_time = arr_time + timedelta(days=float(sh.cell_value(1,5))) 
 import datetime arr_time = datetime.datetime.strptime('2016-08-28 13:10:00', '%Y-%m-%d %H:%M:%S') slack_time="00:15:00" hrs,mts=slack_time.split(":")[:2] new_time = arr_time + datetime.timedelta(hours=int(hrs),minutes=int(mts)) 

如果你想从new_time得到,你可以以string格式取回date

尝试这一个 – 希望它的作品

 d = datetime.datetime.strptime(arr_time, "%Y-%m-%d %H:%M:%S") mtime = str(d.hour) + ':' + str(d.minute) + ':' + str(d.second) # Split the time from DateTime and store to a variable named mtime mdate = str(d.year) + '-' + str(d.month) + '-' + str(d.day) # Store the date into a variable named mdate timeList = [ mtime, slack_time ] totalSecs = 0 for tm in timeList: timeParts = [int(s) for s in tm.split(':')] totalSecs += (timeParts[0] * 60 + timeParts[1]) * 60 + timeParts[2] totalSecs, sec = divmod(totalSecs, 60) hr, min = divmod(totalSecs, 60) ntime = "%d:%02d:%02d" % (hr, min, sec) print ntime mergedTime = mdate + ' ' + ntime print 'Merged Date/Time is: ', mergedTime