栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将日期时间推迟到下一刻钟

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将日期时间推迟到下一刻钟

这需要微秒!

import mathdef ceil_dt(dt):    # how many secs have passed this hour    nsecs = dt.minute*60 + dt.second + dt.microsecond*1e-6      # number of seconds to next quarter hour mark    # Non-analytic (brute force is fun) way:      #   delta = next(x for x in xrange(0,3601,900) if x>=nsecs) - nsecs    # analytic way:    delta = math.ceil(nsecs / 900) * 900 - nsecs    #time + number of seconds to quarter hour mark.    return dt + datetime.timedelta(seconds=delta)t1 = datetime.datetime(2017, 3, 6, 7, 0)assert ceil_dt(t1) == t1t2 = datetime.datetime(2017, 3, 6, 7, 1)assert ceil_dt(t2) == datetime.datetime(2017, 3, 6, 7, 15)t3 = datetime.datetime(2017, 3, 6, 7, 15)assert ceil_dt(t3) == t3t4 = datetime.datetime(2017, 3, 6, 7, 16)assert ceil_dt(t4) == datetime.datetime(2017, 3, 6, 7, 30)t5 = datetime.datetime(2017, 3, 6, 7, 30)assert ceil_dt(t5) == t5t6 = datetime.datetime(2017, 3, 6, 7, 31)assert ceil_dt(t6) == datetime.datetime(2017, 3, 6, 7, 45)t7 = datetime.datetime(2017, 3, 6, 7, 45)assert ceil_dt(t7) == t7t8 = datetime.datetime(2017, 3, 6, 7, 46)assert ceil_dt(t8) == datetime.datetime(2017, 3, 6, 8, 0)

说明

delta

  • 900秒是15分钟(四分之一小时 不包含leap秒,我认为日期时间无法处理…
  • nsecs / 900
    是已发生的四分之一小时块的数量。
    ceil
    以此取整四分之一小时的块数。
  • 将四分之一小时的块数乘以900,以计算自“四舍五入”后的小时开始以来已经发生了多少秒。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号