首页 > 解决方案 > 从整数或字符串进行简单的日期时间转换

问题描述

有没有一种简单的方法可以将开始和结束时间输入转换为均匀分开的时间列表?输入可以是字符串或整数,格式为 1000、1000 或 2400 小时格式的“10:00”。我已经设法以一种看起来凌乱的方式完成了这项工作,是否有更紧密更有效的方式来创建这个列表?您会注意到,我首先创建了一个数组,然后调用了 .tolist() 以使时间转换迭代更容易。问题是需要将 1030 或 1015 的输入转换为 1050 或 1025 以创建正确的间距,但是如果有办法我可以调用 datetime.timedelta 或其他东西并干净地制作数组?

    start="1000"
    end="1600"
    total_minutes=(int(end[:2])*60)+int(end[2:])-(int(start[:2])*60)- 
    int(start[2:])
        dog=list(range(0,int(total_minutes),25))
        walk=dog_df["Walk Length"][dog_df.index[dog_df["Name"]==self.name][0]]

        if walk=='half':
            self.dogarr=np.array([(x-25,x,x+25,x+50) for x in dog])
        elif walk=='full':
            self.dogarr=np.array([(x-25,x,x+25,x+50,x+75,x+100) for x in dog])
        else:
            self.dogarr=np.array([(x,x+25,x+50) for x in dog])
        if int(start[2])!=0:
            start=start[:2]+str(int(int(start[2:])*1.667))
        self.dogarr+=(int(start))
        self.dogarr=self.dogarr.tolist()
        z=0
        while z<len(self.dogarr):
            for timespot in self.dogarr[z].copy():
                self.dogarr[z][self.dogarr[z].index(timespot)]=time.strftime('%H%M', time.gmtime(self.dogarr[z][self.dogarr[z].index(timespot)]*36))
            z+=1
        self.dogarr=np.array(self.dogarr)```

array([['1115', '1130', '1145', '1200'],
       ['1130', '1145', '1200', '1215'],
       ['1145', '1200', '1215', '1230'],
       ['1200', '1215', '1230', '1245'],
       ['1215', '1230', '1245', '1300']], dtype='<U4')


标签: python-3.x

解决方案


我相信您可以从任意数量的现有问题中找出解析时间。您问题的症结似乎是如何在一个范围内创建均匀分开的时间。这是一个简单的方法:

start = datetime.datetime(2018,12,20,10) # or use strptime etc.
end = datetime.datetime(2018,12,24,18)
count = 10
interval = (end - start) / count
dt = start
while dt <= end:
    print(dt)
    dt += interval

输出是:

2018-12-20 10:00:00
2018-12-20 20:24:00
2018-12-21 06:48:00
2018-12-21 17:12:00
2018-12-22 03:36:00
2018-12-22 14:00:00
2018-12-23 00:24:00
2018-12-23 10:48:00
2018-12-23 21:12:00
2018-12-24 07:36:00
2018-12-24 18:00:00

推荐阅读