python获取指定时间段内的随机不重复的时间点

Life is short, you need Python - Bruce Eckel
Package Index, Python 3.5.3 documentation
头像
灵台方寸山
出类拔萃
出类拔萃
帖子: 79
注册时间: 2016年08月06日 16:40
拥有现金: 锁定
储蓄: 锁定
来自: [color=red]斜月三星洞[/color]
Has thanked: 24 times
Been thanked: 17 times

python获取指定时间段内的随机不重复的时间点

帖子 #1 灵台方寸山 » 2016年12月11日 08:24

上篇 《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/%E5%8D%8F%E8%B0%83%E4%B8%96%E7%95%8C%E6%97%B6
UNIX时间,或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数。

任意当天24小时内的时间转成秒数后都刚好等于UTC 1970年1月1日的时间戳。所以有需要的话可以使用编程语言内置的时间戳函数进行转换。
:crazylaugh3 :oh_no
少发点科普,对中医产业,骗子产业不好。

happy886rr
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月27日 16:11
拥有现金: 锁定
储蓄: 锁定
Has thanked: 14 times
Been thanked: 14 times
联系:

Re: python获取指定时间段内的随机不重复的时间点

帖子 #2 happy886rr » 2016年12月11日 09:56

兄的py炉火纯青。


回到 “Python”

在线用户

用户浏览此论坛: 没有注册用户 和 4 访客