[英]How to get 30 minute time slots python2.7
我目前能够在两个数字之间获得 1 小时的时隙,但我想获得 30 分钟间隔的时隙。
我的完整代码:
from datetime import datetime, timedelta, time
def get_time_slotes():
work_times = [u'08:00', u'17:00']
appointments = [u'12:30', u'13:00', u'09:00', u'9:30']
# list_of_times = [u'08:00', u'12:30', u'13:00', u'09:00', u'9:30', u'17:00']
work_time_convert = sorted(datetime.strptime(x.encode('utf-8'),'%H:%M').time() for x in work_times)
appointments_convert = sorted(datetime.strptime(x.encode('utf-8'),'%H:%M').time() for x in appointments)
# I COMMENTED THIS LINE OUT AND COPIED IT AS IT REMOVEs THE APPOINTMENT CONVERTED TIMES FROM THE LIST.
# res = [x.strftime("%H:%M") for x in sorted(set(time(x,0,0,0) for x in range(min(work_time_convert).hour, max(work_time_convert).hour + 1)) - set(appointments_convert))]
#IN THIS QUESTION I WOULD LIKE THE OUTPUT OF THIS LINE TO BE IN 30 MIN INTERVALS RATHER THAN 1 HOUR
res = [x.strftime("%H:%M") for x in sorted(set(time(x,0,0,0) for x in range(min(work_time_convert).hour, max(work_time_convert).hour + 1)))]
print("The list of missing elements : " + str(res))
if __name__ == "__main__":
get_time_slotes()
查找两个数字之间缺少的时隙的代码是:
res = [x.strftime("%H:%M") for x in sorted(set(time(x,0,0,0) for x in range(min(work_time_convert).hour, max(work_time_convert).hour + 1)))]
哪个输出:
The list of missing elements : ['08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00']
我希望它是:
The list of missing elements : ['08:00', '08:30', '09:00', '9:30', '10:30', ...] # and so forth
获得列表后,我只需从中删除约会时间,留下可用时间。
我认为您可以将生成插槽的代码简化为
res = [time(t,0,0,0).strftime("%H:%M") for t in range(min(work_time_convert).hour, max(work_time_convert).hour)]
从那里通过为0
或30
的分钟值生成时间值来扩展它以包含 30 分钟时间是相当简单的:
res = [time(t,m,0,0).strftime("%H:%M") for t in range(min(work_time_convert).hour, max(work_time_convert).hour) for m in [0, 30]]
Output:
['08:00', '08:30', '09:00', '09:30',
'10:00', '10:30', '11:00', '11:30',
'12:00', '12:30', '13:00', '13:30',
'14:00', '14:30', '15:00', '15:30',
'16:00', '16:30']
当一个小时包含整数个间隔时,您可以只使用两个循环:
In [2]: [time(h, m).strftime('%H:%M') for h in range(8, 17) for m in (0, 30)]
Out[2]:
['08:00',
'08:30',
'09:00',
'09:30',
'10:00',
'10:30',
'11:00',
'11:30',
'12:00',
'12:30',
'13:00',
'13:30',
'14:00',
'14:30',
'15:00',
'15:30',
'16:00',
'16:30']
对于像23 minutes
这样的间隔,您可以使用以下代码:
In [3]: [time(m // 60, m % 60).strftime('%H:%M') for m in range(8 * 60, 17 * 60, 23)]
Out[3]:
['08:00',
'08:23',
'08:46',
'09:09',
'09:32',
'09:55',
'10:18',
'10:41',
'11:04',
'11:27',
'11:50',
'12:13',
'12:36',
'12:59',
'13:22',
'13:45',
'14:08',
'14:31',
'14:54',
'15:17',
'15:40',
'16:03',
'16:26',
'16:49']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.