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

时间:2017-07-11 05:51:52

标签: python excel datetime

我有一个简单的问题(至少我是这么认为的),我想在Python中为datetime值添加一个时间值。这些值是从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这里是一个日期时间值,可以改变,例如:

2016-08-28 13:10:00

slack_time这里是一个以分钟(有时是几小时)为单位的时间,可能会有所不同,例如:

00:15:00

我想将松弛时间(例如15分钟)添加到arr_time。因此,对于此示例,我想获得new_arr_time的以下输出:

2016-08-28 13:25:00

但是,在运行我的代码时,我收到以下错误:" TypeError:不支持的操作数类型为+:'datetime.datetime'和'datetime.time'"。 从这个,我明白我不能为datetime值添加时间值,但是当将slack_time转换为datetime值然后将slack_time添加到arr_time时,我得到一个类似的错误(尽管减去这样做)。我知道我可以使用timedelta(分钟= 15),但由于excel文件中的值有所不同,有时包含几小时,这对我不起作用。

所以我的问题是:如何将从excel读取的时间值添加到日期时间值?

3 个答案:

答案 0 :(得分:2)

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

,可以以字符串格式取回日期

答案 1 :(得分:2)

您应该使用浮动值来构建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)))

答案 2 :(得分:0)

试试这个 - 希望它有效

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