Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python时间数学_Python_Datetime_Time - Fatal编程技术网

Python时间数学

Python时间数学,python,datetime,time,Python,Datetime,Time,我想写一个程序,允许用户输入开始时间小时、结束时间小时和分区数 因此,他们可能会输入9、10和4,这意味着开始时间为9:00AM,结束时间为10:00AM,并将范围拆分4次,从而产生9:00、9:15、9:30、9:45的输出 我尝试使用时间模块和日期时间,但无法增加工作时间。我不在乎日期 我可以计算时间分割,但实际增加的开始时间是回避我 我有一大堆的代码,下面是我的主要实验,试图找出如何使其工作。我尝试添加分钟,尝试转换为秒,深入研究datetime,尝试使用时间模块,但似乎无法使其工作。有很

我想写一个程序,允许用户输入开始时间小时、结束时间小时和分区数

因此,他们可能会输入9、10和4,这意味着开始时间为9:00AM,结束时间为10:00AM,并将范围拆分4次,从而产生9:00、9:15、9:30、9:45的输出

我尝试使用时间模块和日期时间,但无法增加工作时间。我不在乎日期

我可以计算时间分割,但实际增加的开始时间是回避我

我有一大堆的代码,下面是我的主要实验,试图找出如何使其工作。我尝试添加分钟,尝试转换为秒,深入研究datetime,尝试使用时间模块,但似乎无法使其工作。有很多例子说明如何在现在增加15分钟,但问题是我不想现在就开始,而是让用户决定开始时间

多谢各位

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分钟,此代码不会完全失败,但不会正确。感谢您的帮助-这正是我所需要的!