Python,将DOWN时间舍入到最接近的15分钟时钟标记



我如何将时间四舍五入到最接近的 15 分钟时钟标记。下面的代码四舍五入到最接近的 15 分钟时钟标记,即如果时间是 5:08 变为 5:15。但是我想让这个四舍五入而不是上升并变成 5:00请帮忙

这是我的代码

fajr_jamaat = ceil(fajr_jamaat_date).strftime('%H:%M:%S')

函数是

def ceil(dt):
    if dt.minute % 15 or dt.second:
        return dt + timedelta(minutes = 15 - dt.minute % 15, seconds = -(dt.second % 60))
    else:
        return dt

应该有效。

import datetime
def ceil(dt):
    minut = int(dt.strftime('%M'))*60
    secon = int(dt.strftime('%S'))
    h = int(dt.strftime('%H'))
    tot = minut + secon
    #print(tot)
    nearest = round(tot/900)*900
    #print('time is %d:%d'%(tot/60, tot%60), 'nearest fifteen mark is %d:%d'%(nearest/60, nearest%60))
    if nearest/60 == 60 and h < 23:
        nr_15_mark = dt.replace(hour=h+1, minute=0, second=0)
    elif nearest/60 == 60 and h == 23:
        #wrapping the hour back to 0 
        nr_15_mark = dt.replace(hour=0, minute=0, second=0)
    else:
        nr_15_mark = dt.replace(minute=int(nearest/60), second=nearest%60)
    return nr_15_mark
#fajr_jamaat_date = datetime.datetime(2017,1,1,23,58,0)
fajr_jamaat = ceil(fajr_jamaat_date).strftime('%H:%M:%S')
#print(fajr_jamaat)

请注意,由于我们只考虑小时、分钟和秒,当我们在fajr_jamaat_date时间超过 23:47:30 时找到最近的标记时,我会忽略日期添加。

对我来说,这个版本。原则上,它可以处理可能溢出的小时和天数

def flat_data(dt, period, f = round):
     minut = int(dt.strftime('%M'))*60
     secon = int(dt.strftime('%S'))
     time_stamp = dt.timestamp()
     tot = minut + secon
     time_stamp -= tot 
#     print(time_stamp, tot)
     nearest = f(tot/(period*60))*(period*60)
#     print(nearest)
     flat_date= datetime.datetime.fromtimestamp(int(time_stamp) + nearest)
     return flat_date

最新更新