根据小时和分钟列表生成日期

3
我有一个小时和分钟的列表。我想修改这个列表,使得每个元素后面都有一个日期。
['09:00', '11:00', '12:00', '13:00', '15:00', '16:00', '16:20', '17:00', '18:00', '20:00', '22:00', '22:30', '23:00', '00:00', '01:00', '03:00', '04:00', '07:00', '09:00', '11:00', '12:00', '13:00', '15:00', '16:00', '16:30', '17:00', '18:00']

为了获取每个小时的相关日期,我尝试计算时间,但结果不是我想要的。
for start in times:
     now = datetime.today().strftime('%Y %m %d')
     first_elem= (datetime.strptime(times[0],'%H:%M')  - timedelta(hours=1)).strftime('%H:%M')
     tit = datetime.strptime(start,'%H:%M')
     m=tit.strftime('%M')
     h=tit.strftime('%H')
     b = datetime.strptime(now+' '+first_elem,'%Y %m %d %H:%M').strftime('%Y %m %d %H:%M')
     a = datetime.strptime(b,'%Y %m %d %H:%M')
     a += timedelta(hours=int(h),minutes=int(m))
     print(a)

这是我所得到的输出:

2020-05-05 17:00:00
2020-05-05 19:00:00
2020-05-05 20:00:00
2020-05-05 21:00:00
2020-05-05 23:00:00
2020-05-06 00:00:00
2020-05-06 00:20:00
2020-05-06 01:00:00
2020-05-06 02:00:00
2020-05-06 04:00:00
2020-05-06 06:00:00
2020-05-06 06:30:00
2020-05-06 07:00:00
2020-05-05 08:00:00
2020-05-05 09:00:00
2020-05-05 11:00:00
2020-05-05 12:00:00
2020-05-05 15:00:00
2020-05-05 17:00:00
2020-05-05 19:00:00
2020-05-05 20:00:00
2020-05-05 21:00:00
2020-05-05 23:00:00
2020-05-06 00:00:00
2020-05-06 00:30:00
2020-05-06 01:00:00
2020-05-06 02:00:00

但是我希望每当小时在夜间重置时日期也能相应增加。我的期望是像这里显示的那样每次日期都会递增:
2020-05-05 09:00:00
2020-05-05 11:00:00
2020-05-05 12:00:00
2020-05-05 13:00:00
2020-05-05 15:00:00
2020-05-05 16:00:00
2020-05-05 16:20:00
2020-05-05 17:00:00
2020-05-05 18:00:00
2020-05-05 20:00:00
2020-05-05 22:00:00
2020-05-05 22:30:00
2020-05-05 23:00:00
2020-05-06 00:00:00
2020-05-06 01:00:00
2020-05-06 03:00:00
2020-05-06 04:00:00

所以问题是日期仍然相同吗? - A. Abramov
是的,那就是问题。 - jhon
1个回答

2
这是使用datetime模块的一种方法。
例如:
import datetime

data = ['09:00', '11:00', '12:00', '13:00', '15:00', '16:00', '16:20', '17:00', '18:00', '20:00', '22:00', '22:30', '23:00', '00:00', '01:00', '03:00', '04:00', '07:00', '09:00', '11:00', '12:00', '13:00', '15:00', '16:00', '16:30', '17:00', '18:00']
today = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) 
last_hr = 0
for d in data:
    h, m = map(int, d.split(":"))
    if last_hr > h:
        today = today + datetime.timedelta(days=1)    #Increment date if last hour greater than current hr.

    last_hr = h
    print(today + datetime.timedelta(hours=h, minutes=m))

输出:

2020-05-05 09:00:00
2020-05-05 11:00:00
2020-05-05 12:00:00
2020-05-05 13:00:00
2020-05-05 15:00:00
2020-05-05 16:00:00
2020-05-05 16:20:00
2020-05-05 17:00:00
2020-05-05 18:00:00
2020-05-05 20:00:00
2020-05-05 22:00:00
2020-05-05 22:30:00
2020-05-05 23:00:00
2020-05-06 00:00:00
2020-05-06 01:00:00
2020-05-06 03:00:00
2020-05-06 04:00:00
2020-05-06 07:00:00
2020-05-06 09:00:00
2020-05-06 11:00:00
2020-05-06 12:00:00
2020-05-06 13:00:00
2020-05-06 15:00:00
2020-05-06 16:00:00
2020-05-06 16:30:00
2020-05-06 17:00:00
2020-05-06 18:00:00

这正是我所期望的结果,谢谢。 - jhon
干得好;这引发了一个问题,如果超过24小时。 - A. Abramov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接