Python time模块实现指定时间触发器详解
本文详细介绍如何利用Python的time模块实现指定时间的触发器功能。文章解析了时间戳与元组两种表示形式,列举了time模块核心函数的用法,并通过代码示例演示如何计算时间差、实现定时执行特定逻辑(如HTTP请求),适用于需要精确时间控制的场景。
本文通过一个具体实例,讲解如何在Python中利用time模块构建指定时间的触发器。内容旨在为读者提供实用的参考方案。
实现逻辑并不复杂,核心在于设定特定时间点,使脚本在该时刻执行预设事件,例如发起一个GET请求。
各类编程语言均提供时间处理功能,Python同样具备完善的时间操作机制。
查阅time模块的帮助文档(help(time))可知,Python主要支持两种时间表示方式:
第一种是时间戳表示法,采用整型或浮点数表示以秒为单位的时间间隔。其基准起点为1970年1月1日零点。
第二种是元组格式表示法,这是一种Python特定的数据结构。该元组包含9个整型元素,分别对应不同的时间属性。
year(四位年份,如1998) month(1至12) day(1至31) hours(0至23) minutes(0至59) seconds(0至59) weekday(0至6,周一为0) Julian day(一年中的第几天,1至366) DST(夏令时标志,-1、0或1;0表示标准时间,1表示夏令时,-1表示根据当前日期自动判定)
time() 或 datetime.now() 用于返回当前时间戳,结果为浮点数,无需参数。
clock() 用于返回当前程序的CPU执行时间。在Unix系统中,它始终返回总运行时间;而在Windows系统中,从第二次调用开始,基准点为第一次调用时的时间戳,而非程序启动时间。此函数不接受参数。
sleep() 用于暂停执行指定时间段,支持整型或浮点型参数。
gmtime() 将时间戳转换为UTC时间的元组格式。接收一个浮点型时间戳参数,若未提供则默认为当前时间戳。
localtime() 将时间戳转换为本地时间的元组格式。接收一个浮点型时间戳参数,若未提供则默认为当前时间戳。
asctime() 将时间元组转换为字符串形式。接收一个时间元组参数,若未提供则默认为localtime()的返回值。
ctime() 将时间戳转换为字符串。接收一个时间戳参数,若未提供则默认为当前时间戳。其功能等价于asctime(localtime(seconds))。
mktime() 将本地时间元组转换为时间戳。接收一个时间元组参数,该参数为必填项。
strftime() 将时间元组按指定格式转换为字符串。接收字符串格式化串和时间元组两个参数,其中时间元组为可选,默认为localtime()的返回值。
strptime() 将指定格式的时间字符串解析为时间元组,这是strftime()的逆向操作。接收字符串和时间格式两个参数,均为必填项。
此外,时间差对象支持减法运算,并可调用total_seconds()方法将时间差转换为秒数,具体用法见后续代码部分。
示例代码如下:
import httplib
import time
def doFirst():
from datetime import datetime, timedelta
curTime = datetime.now()
#print curTime
desTime = curTime.replace(hour=3, minute=0, second=0, microsecond=0)
#print desTime
delta = desTime-curTime
#print delta
skipSeconds = int(delta.total_seconds())
#print skipSeconds
if skipSeconds==0:
return True
else:
if skipSeconds<0:
skipSeconds+=24*60*60
print "Must sleep %d seconds" % skipSeconds
return False
#也可以采取获取当前时间差值然后自己计数,不过考虑误差问题,就不采取了
def getTime():
from datetime import datetime, timedelta
curTime = datetime.now()
#print curTime
desTime = curTime.replace(hour=3, minute=0, second=0, microsecond=0)
#print desTime
delta = desTime-curTime
#print delta
skipSeconds = int(delta.total_seconds())
if skipSeconds<0:
skipSeconds+=24*60*60
print skipSeconds
return skipSeconds
def gethttp():
url = "URL"
conn = httplib.HTTPConnection("IP")
conn.request(method="GET",url=url)
response = conn.getresponse()
res= response.read()
print res
#getTime()
while True:
if doFirst():
gethttp()
time.sleep(24*59*60)
time.sleep(1)
s.close()

注意:时间字符串支持的格式符号如下:
格式与含义备注对照表
%a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化月份名称 %B 本地完整月份名称 %c 本地相应的日期和时间表示 %d 一个月中的第几天(01 - 31) %H 一天中的第几个小时(24小时制,00 - 23) %I 第几个小时(12小时制,01 - 12) %j 一年中的第几天(001 - 366) %m 月份(01 - 12) %M 分钟数(00 - 59) %p 本地am或pm的相应符 %S 秒(01 - 61) %U 一年中的星期数(00 - 53,以星期天为一周开始,第一个星期天前的天数归入第0周) %w 一个星期中的第几天(0 - 6,0代表星期天) %W 与%U基本相同,区别在于%W以星期一为一周开始。 %x 本地相应日期 %X 本地相应时间 %y 去掉世纪的年份(00 - 99) %Y 完整年份 %Z 时区名称(若不存在则为空字符) %% 字面量'%'字符
补充说明:本站还提供多款实用的Unix时间戳转换及日期在线工具,供读者参考使用:
Unix时间戳(timestamp)转换工具: http://tools.jb51.net/code/unixtime
在线日期/天数计算器: http://tools.jb51.net/jisuanqi/date_jisuanqi
在线万年历日历: http://tools.jb51.net/bianmin/wannianli
在线阴历/阳历转换工具: http://tools.jb51.net/bianmin/yinli2yangli
对Python其他功能感兴趣的读者,可进一步查阅本站专题:《Python日期与时间操作技巧总结》、《Python URL操作技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对大家的Python程序设计工作有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













