如何在Python中向datetime值添加时间值?

2024-04-23 10:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的问题(至少我这么认为),我想在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\u time是一个日期时间值,可以改变,例如:

2016-08-28 13:10:00

这里的空闲时间是以分钟(有时是小时)为单位的时间,可以变化,例如:

00:15:00

我想将空闲时间(例如15分钟)添加到arr\u时间。因此,在本例中,我希望获得新的\u arr \u时间的以下输出:

2016-08-28 13:25:00

但是,在运行代码时,出现以下错误:“TypeError:不支持+”的操作数类型:'日期时间。日期时间'和'日期时间.time’". 由此,我了解到我不能将时间值添加到datetime值,但是当将slack\u time转换为datetime值,然后将slack\u time添加到arr\u time时,我会得到一个类似的错误(尽管减法是这样工作的)。我知道我可以使用timedelta(minutes=15),但由于excel文件中的值不同,有时包含小时数,所以这对我不起作用。你知道吗

所以我的问题是:如何将从excel读取的时间值添加到datetime值?你知道吗


Tags: 文件代码importa2datetimetimevaluesh
3条回答

试试这个-希望有用

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

您应该使用float值将slack_time构建到一个持续时间中,即^{}对象。然后可以将其添加到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以字符串格式获取日期

相关问题 更多 >