zoukankan      html  css  js  c++  java
  • python获取指定时间段内的随机不重复的时间点

    上篇 《python时间时分秒与秒数的互相转换》http://www.cnblogs.com/gayhub/p/6154707.html 提到了把时间转成秒数的方法,
    这篇写写转换成秒数后有些什么用处。

    场景1:取N个07:30:00-09:30:33之间的随机时间。

    下面是我的代码:

    #2016-12-10 7:06:29 codegay
    import random
    st = "07:30:00"
    et = "09:30:33"
    
    def time2seconds(t):
        h,m,s = t.strip().split(":")
        return int(h) * 3600 + int(m) * 60 + int(s)
    
    def seconds2time(sec):
        m,s = divmod(sec,60)
        h,m = divmod(m,60)
        return "%02d:%02d:%02d" % (h,m,s)
    
    sts = time2seconds(st) #sts==27000
    ets = time2seconds(et) #ets==34233
    
    rt = random.sample(range(sts,ets),10)
    #rt == [28931, 29977, 33207, 33082, 31174, 30200, 27458, 27434, 33367, 30450]
    
    rt.sort() #对时间从小到大排序
    
    
    for r in rt:
        print(seconds2time(r))
    
    """
    输出:
    07:43:12
    07:54:31
    08:08:33
    08:27:46
    08:46:53
    08:48:17
    08:55:20
    08:59:16
    09:10:23
    09:15:58
    """
    

    从代码中可以发现思路是把时间转成秒数后,那么就可以用range生07:30-09:30之间的时间秒数,再用random.sample从中取出个N个秒数,最后再把秒数转成所需要的时间格式。

    场景2: 时间大小比较和时间范围的判断

    >>> "09:30:00" > "9:30:00"
    False
    >>> "09:30:00" == "9:30:00"
    False
    

    基于字符串的判断可能会出现像上面的情况,我感觉统一转成数字后再计算更可靠。

    场景3:时间转成秒数后刚好等于1970年1月1日的时间戳

    参考维基百科:https://zh.wikipedia.org/wiki/协调世界时
    UNIX时间,或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数。

    任意当天24小时内的时间转成秒数后都刚好等于UTC 1970年1月1日的时间戳。所以有需要的话可以使用编程语言内置的时间戳函数进行转换。

  • 相关阅读:
    洛咕 P4131 [WC2005]友好的生物
    P3354 [IOI2005]Riv 河流
    洛咕 P3645 [APIO2015]雅加达的摩天楼
    洛咕 P4528 [CTSC2008]图腾
    CSDN不登录阅读全文(最新更新
    #6472. 「ICPC World Finals 2017」难以置信的任务 Mission Improbable
    #6435. 「PKUSC2018」星际穿越
    #2009. 「SCOI2015」小凸玩密室
    #2007. 「SCOI2015」国旗计划
    PKUWC2018题解
  • 原文地址:https://www.cnblogs.com/gayhub/p/6158998.html
Copyright © 2011-2022 走看看