繁体   English   中英

python2.7如何获取30分钟时隙

[英]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)]

从那里通过为030的分钟值生成时间值来扩展它以包含 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM