找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19642|回复: 1

[原创教程] python获取指定时间段内的随机不重复的时间点

[复制链接]
发表于 2016-12-11 08:22:56 | 显示全部楼层 |阅读模式
python获取指定时间段内的随机不重复的时间点

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

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

下面是我的代码:

  1. #2016-12-10 7:06:29 codegay
  2. import random
  3. st = "07:30:00"
  4. et = "09:30:33"

  5. def time2seconds(t):
  6.     h,m,s = t.strip().split(":")
  7.     return int(h) * 3600 + int(m) * 60 + int(s)

  8. def seconds2time(sec):
  9.     m,s = divmod(sec,60)
  10.     h,m = divmod(m,60)
  11.     return "%02d:%02d:%02d" % (h,m,s)

  12. sts = time2seconds(st) #sts==27000
  13. ets = time2seconds(et) #ets==34233

  14. rt = random.sample(range(sts,ets),10)
  15. #rt == [28931, 29977, 33207, 33082, 31174, 30200, 27458, 27434, 33367, 30450]

  16. rt.sort() #对时间从小到大排序


  17. for r in rt:
  18.     print(seconds2time(r))

  19. """
  20. 输出:
  21. 07:43:12
  22. 07:54:31
  23. 08:08:33
  24. 08:27:46
  25. 08:46:53
  26. 08:48:17
  27. 08:55:20
  28. 08:59:16
  29. 09:10:23
  30. 09:15:58
  31. """
复制代码
从代码中可以发现思路是把时间转成秒数后,那么就可以用range生07:30-09:30之间的时间秒数,再用random.sample从中取出个N个秒数,最后再把秒数转成所需要的时间格式。

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

  1. >>> "09:30:00" > "9:30:00"
  2. False
  3. >>> "09:30:00" == "9:30:00"
  4. False
复制代码
基于字符串的判断可能会出现像上面的情况,我感觉统一转成数字后再计算更可靠。

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

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

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

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 1

查看全部评分

发表于 2016-12-11 09:53:11 | 显示全部楼层
相当好,又学到不少。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:35 , Processed in 0.018933 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表