python中时间函数及其应用
近段时间,因在改写以前写的学校自动铃声控制系统,又学到了一些新的知识,特记录如下:
一、时间函数基础
1、time模块中的函数及其用法
-
time.time()
: 返回当前时间的时间戳,即自1970年1月1日以来的秒数。 -
time.localtime()
: 返回本地时间的结构化表示。如time.struct_time(tm_year=2024, tm_mon=10, tm_mday=6, tm_hour=20, tm_min=12, tm_sec=1, tm_wday=6, tm_yday=280, tm_isdst=0) -
time.gmtime()
: 返回UTC时间的结构化表示。如time.struct_time(tm_year=2024, tm_mon=10, tm_mday=6, tm_hour=12, tm_min=12, tm_sec=1, tm_wday=6, tm_yday=280, tm_isdst=0) -
time.sleep(seconds)
: 使程序暂停指定的秒数。 -
time.strftime('%Y-%m-%d %H:%M:%S'
, t)
: 将结构化时间对象转换为指定格式的字符串。 time.strptime(string,'%Y-%m-%d %H:%M:%S'
)
: 将字符串转换为结构化时间对象。
2、datetime模块中的函数及其用法
datetime.datetime()
: 创建日期时间对象。datetime.now()
: 获取当前日期和时间。datetime.fromtimestamp(timestamp)
: 将时间戳转换为日期时间对象。datetime.timedelta()
: 表示两个日期或时间之间的差异。
二、时间函数的应用
3、将用字符串形式表示的日期时间格式化
from datetime import datetime,date,time
import time
from chinese_calendar import is_workday, is_holiday, is_in_lieudat = '2021-9-11'
tim = '9:11:30'
str_time = dat + ' ' + tim # 用空格分隔日期与时间
t_strp = datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S') # 字符格式解析为日期时间
print('当前时间t_strp为', t_strp, type(t_strp))
结果为:当前时间t_strp为 2021-09-11 09:11:30 <class 'datetime.datetime'>
4、时间对象转换为指定格式的字符串
from datetime import datetime,date,time
import time
from chinese_calendar import is_workday, is_holiday, is_in_lieut_strf = time.strftime('%Y-%m-%d %H:%M:%S %A', time.localtime()) # 格式化输出
print('本地时间localtime为:',time.localtime())
print('本地时间t_strf为', t_strftime, type(t_strftime))
运行结果为:本地时间localtime为:time.struct_time(tm_year=2024, tm_mon=10, tm_mday=6, tm_hour=20, tm_min=31, tm_sec=20, tm_wday=6, tm_yday=280, tm_isdst=0)
本地时间为t_strf为 2024-10-06 20:31:20 Sunday <class 'str'>
5、合并日期时间
我们从指令电子表格中分别提取各指令时间,日期则用当前日期,合并成日期时间,再转变成时间戳,就可以和当前时间求时间差,从而判断指令是否该运行了。
需要注意的是,电子表格提取的时间已经是时间格式。
import openpyxl
import re
import colorama # 打包后彩色字显示用
from datetime import datetime, date, time,timedelta
from chinese_calendar import is_workday, is_holiday # 自动判断中国假期
import time
import oswb = openpyxl.load_workbook('自动打铃指令.xlsx',data_only=True) # 打开指令文件,如有公式只读数据
sheet = wb['Sheet1']
tim = sheet['B' + str(i)].value # 提取指令时间,已是datetime数据类型
time2 = datetime.combine(date_today, time1) # 合并日期时间,已是datetime数据类型t0 = time.time()
t1 = time2.timestamp()
differtime = (t1 - t0) # 时间差(秒)
6、自动判断中国工作日和假日
对于学校上课铃声控制,还要考虑周末响铃扰民问题,起先考虑平常周从星期列表中判断周六周日不响铃,国家节假日调休时再重新生成一个新的列表,很是复杂。
不经意间,发现有第三方插件chinese_calendar,能自动判断中国节假日,太好了。
import openpyxl
import re
import colorama # 打包后彩色字显示用
from datetime import datetime, date, time,timedelta
from chinese_calendar import is_workday, is_holiday # 自动判断中国假期
import time
import oswhile True:date_today = date.today() # 重新读取当前时间week_list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]weekday = date_today.weekday()week = week_list[weekday]# print('星期:', week_list[weekday])print(f'今天是{date_today},{week}')work_day = is_workday(date_today) # 能自動判斷中國工作日holi_day = is_holiday(date_today) # 能自動判斷中國節假日# print('工作日', is_workday(date_today))if work_day == True: # 工作日print('是国家规定的工作日。')ins() # 导入指令包run() # 运行主程序else:date_today = date.today()
极域电子教室座位表程序下载链接:链接:https://pan.baidu.com/s/1X0WUTtXmr1EhFg9CNgoIKA?pwd=odvs
提取码:odvs
考试指令系统下载链接:https://pan.baidu.com/s/11x9fS1gUEPCd6w15KHCxSw?pwd=zvw3
提取码:zvw3
照片插入电子表格程序链接:https://pan.baidu.com/s/1dvW5q9G53prkUDVcO6uffA?pwd=w3jp
提取码:w3jp