Python时间数学
我想写一个程序,允许用户输入开始时间小时、结束时间小时和分区数 因此,他们可能会输入9、10和4,这意味着开始时间为9:00AM,结束时间为10:00AM,并将范围拆分4次,从而产生9:00、9:15、9:30、9:45的输出 我尝试使用时间模块和日期时间,但无法增加工作时间。我不在乎日期 我可以计算时间分割,但实际增加的开始时间是回避我 我有一大堆的代码,下面是我的主要实验,试图找出如何使其工作。我尝试添加分钟,尝试转换为秒,深入研究datetime,尝试使用时间模块,但似乎无法使其工作。有很多例子说明如何在现在增加15分钟,但问题是我不想现在就开始,而是让用户决定开始时间 多谢各位Python时间数学,python,datetime,time,Python,Datetime,Time,我想写一个程序,允许用户输入开始时间小时、结束时间小时和分区数 因此,他们可能会输入9、10和4,这意味着开始时间为9:00AM,结束时间为10:00AM,并将范围拆分4次,从而产生9:00、9:15、9:30、9:45的输出 我尝试使用时间模块和日期时间,但无法增加工作时间。我不在乎日期 我可以计算时间分割,但实际增加的开始时间是回避我 我有一大堆的代码,下面是我的主要实验,试图找出如何使其工作。我尝试添加分钟,尝试转换为秒,深入研究datetime,尝试使用时间模块,但似乎无法使其工作。有很
time_start = "9"
time_end = "10"
time_split = "4"
if len(time_start) == 1:
time_start = "0" + str(time_start) + ":00"
else:
time_start = str(time_start) + ":00"
if len(time_end) == 1:
time_end = "0" + str(time_end) + ":00"
else:
time_end = str(time_end) + ":00"
print time_start
print time_end
s1 = time_start + ':00'
s2 = time_end + ':00'
FMT = '%H:%M:%S'
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT)
divided = tdelta / int(time_split)
print tdelta
print divided
s3 = str(divided)
print "s1 time start: " + str(s1)
print "s2 time end: " + str(s2)
print "s3 time divided: " + str(s3)
ftr = [3600,60,1]
add_seconds = sum([a*b for a,b in zip(ftr, map(int,s3.split(':')))])
print "s3 time divided seconds: " + str(add_seconds)
print "time delta: " + str(tdelta)
编辑:我做了一点研究,发现了一个更好的解决方案,可以优雅地处理毫秒级的分辨率。请改为实现此代码,尽管我将为后代保存旧代码
import datetime
start_time = 9 # per user input
end_time = 10 # per user input
divisions = 7 # per user input
total_time = end_time - start_time
start_time = datetime.datetime.combine(datetime.date.today(),datetime.time(start_time))
end_time = start_time + datetime.timedelta(hours=total_time)
increment = total_time*3600000//divisions # resolution in ms
times = [(start_time+datetime.timedelta(milliseconds=increment*i)).time()
for i in range(divisions)]
from pprint import pprint
pprint(list(map(str,times)))
# ['09:00:00',
# '09:08:34.285000',
# '09:17:08.570000',
# '09:25:42.855000',
# '09:34:17.140000',
# '09:42:51.425000',
# '09:51:25.710000']
如果我是你,我会把我的数学作为原始分钟来计算,并使用datetime.time将结果保存为更便携的东西
试试这个:
import datetime
start_time = 9 # per user input
end_time = 10 # per user input
divisions = 4 # per user input
total_minutes = (end_time-start_time)*60
increment = total_minutes // divisions
minutes = [start_time*60]
while minutes[-1] < end_time*60:
# < end_time*60 - increment to exclude end_time from result
minutes.append(minutes[-1] + increment)
times = [datetime.time(c//60,c%60) for c in minutes]
# [09:00:00,
# 09:15:00,
# 09:30:00,
# 09:45:00,
# 10:00:00]
你必须首先回答一些关键问题:你如何处理一天中的分班工作,例如晚上10点到凌晨2点?12小时或24小时格式,例如10=上午10:00或晚上10:00?此外,您计划如何处理输入,例如9、10和7。其中拆分没有那么简单。@Manish请看我对我的答案所做的编辑-我的新实现更干净,更优雅地处理了有关不愉快的时间拆分的问题。请注意,由于您请求的是均匀拆分,因此分钟是此代码将实现的最佳解决方案。正如@Jordonias在对您的问题的评论中提到的,如果您想拆分8次,每次7.5分钟,此代码不会完全失败,但不会正确。感谢您的帮助-这正是我所需要的!