• Python


    Python - 时间处理与定时任务

    1.计算明天和昨天的日期

    # 获取今天、昨天和明天的日期
    # 引入datetime模块
    import datetime
    #计算今天的时间
    today = datetime.date.today()
    #计算昨天的时间
    yesterday = today - datetime.timedelta(days = 1)
    #计算明天的时间
    tomorrow = today + datetime.timedelta(days = 1)
    #打印这三个时间
    print(yesterday,today, tomorrow)

    2.计算上一个的时间

    方法一:计算上一个的时间

    # 计算上一个的时间
    # 引入datetime,calendar两个模块
    import datetime, calendar
    
    last_friday = datetime.date.today()
    oneday = datetime.timedelta(days=1)
    
    while last_friday.weekday() != calendar.FRIDAY:
        last_friday -= oneday
    
    print(last_friday.strftime('%A, %d-%b-%Y'))

    方法二:借助模运算寻找上一个星期五

    # 借助模运算,可以一次算出需要减去的天数,计算上一个星期五
    # 同样引入datetime,calendar两个模块
    import datetime
    import calendar
    
    today = datetime.date.today()
    target_day = calendar.FRIDAY
    this_day = today.weekday()
    delta_to_target = (this_day - target_day) % 7
    last_friday = today - datetime.timedelta(days=delta_to_target)
    
    print(last_friday.strftime("%d-%b-%Y"))

    3.计算歌曲的总播放时间

    # 获取一个列表中的所有歌曲的播放时间之和
    import datetime
    
    
    def total_timer(times):
        td = datetime.timedelta(0)
        duration = sum([datetime.timedelta(minutes=m, seconds=s) for m, s in times], td)
        return duration
    
    
    times1 = [(2, 36),
              (3, 35),
              (3, 45),
              ]
    times2 = [(3, 0),
              (5, 13),
              (4, 12),
              (1, 10),
              ]
    
    assert total_timer(times1) == datetime.timedelta(0, 596)
    assert total_timer(times2) == datetime.timedelta(0, 815)
    
    print("Tests passed.
    "
          "First test total: %s
    "
          "Second test total: %s" % (total_timer(times1), total_timer(times2)))

    4.反复执行某个命令

     1 # 以需要的时间间隔执行某个命令  
     2     
     3 import time, os  
     4     
     5 def re_exe(cmd, inc = 60):  
     6     while True:  
     7         os.system(cmd);  
     8         time.sleep(inc)  
     9     
    10 re_exe("echo %time%", 5)

    5.定时任务

     1 #这里需要引入三个模块
     2 import time, os, sched  
     3     
     4 # 第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数  
     5 # 第二个参数以某种人为的方式衡量时间  
     6 schedule = sched.scheduler(time.time, time.sleep)  
     7     
     8 def perform_command(cmd, inc):  
     9     os.system(cmd)  
    10         
    11 def timming_exe(cmd, inc = 60):  
    12     # enter用来安排某事件的发生时间,从现在起第n秒开始启动  
    13     schedule.enter(inc, 0, perform_command, (cmd, inc))  
    14     # 持续运行,直到计划时间队列变成空为止  
    15     schedule.run()  
    16         
    17     
    18 print("show time after 10 seconds:")  
    19 timming_exe("echo %time%", 10)

    6.利用sched实现周期调用

     1 import time, os, sched  
     2     
     3 # 第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数  
     4 # 第二个参数以某种人为的方式衡量时间  
     5 schedule = sched.scheduler(time.time, time.sleep)  
     6     
     7 def perform_command(cmd, inc):  
     8     # 安排inc秒后再次运行自己,即周期运行  
     9     schedule.enter(inc, 0, perform_command, (cmd, inc))  
    10     os.system(cmd)  
    11         
    12 def timming_exe(cmd, inc = 60):  
    13     # enter用来安排某事件的发生时间,从现在起第n秒开始启动  
    14     schedule.enter(inc, 0, perform_command, (cmd, inc))  
    15     # 持续运行,直到计划时间队列变成空为止  
    16     schedule.run()  
    17         
    18     
    19 print("show time after 10 seconds:")  
    20 timming_exe("echo %time%", 10)
  • 相关阅读:
    POJ 2112 Optimal Milking (Dinic + Floyd + 二分)
    POJ 3678 Katu Puzzle (2-SAT)
    超详细的Java面试题总结(一)之Java基础知识篇
    Java高级面试题及答案
    Java线程面试题 Top 50
    Java面试题收集
    Spring基础使用(一)--------IOC、Bean的XML方式装配
    你不知道的Javascript:有趣的setTimeout
    Java 10 的 10 个新特性,将彻底改变你写代码的方式!
    深入理解 Java 多线程核心知识:跳槽面试必备
  • 原文地址:https://www.cnblogs.com/jeremywucnblog/p/11662071.html
Copyright © 2020-2023  润新知