程序开发中,根据时间选择不同处理方式的场景非常多,例如游戏的防沉迷系统、外卖平台的店铺营业状态管理等。Python中内置了一些与时间处理相关的库,如time、datatime
和calendar
。
time是最基础的时间处理库,该库本质上是一个模块,它包含的所有内容都定义在time.py文件中。
time库中的常用函数
- time()
- localtime()
- gmtime()
- strftime()
- asctime()
- ctime()
- strptime()
- sleep()
time()函数返回 以浮点数表示
的从世界标准时间的1970年1月1日的00:00:00开始到现在的总秒数,也就是时间戳
。
#使用time()函数获取当前时间的时间戳
import time
print(time.time()) #获取时间戳
以时间戳的形势表示的时间是一个浮点数
。python可以通过localtime函数()和gmtime()函数可以获取结构化时间
。
#语法格式:
localtime([secs])
gmtime([secs])
secs
参数是一个表示时间戳的浮点数,若不提供该参数,默认以time()函数获取的时间戳作为参数。
localtime()
函数和gmtime()
都可以将时间戳转换为以元组表示的事件对象(struct_time),但localtime()
得到的是当地时间,gmtime()
得到的是世界统一时间(Coordinated Universal Time,缩写UTC)。
#使用localtime()函数获取时间
import time
print(time.localtime())
print(time.localtime(34,54))
#使用gmtime()函数获取时间
import time
print(time.gmtime())
print(time.gmtime(34,54))
元素 | 含义 | 取值 |
---|---|---|
tm_year | 年 | 4位数字 |
tm_mon | 月 | 1~12 |
tm_mday | 日 | 1~31 |
tm_hour | 时 | 0~23 |
tm_min | 分 | 0~59 |
tm_sec | 秒 | 0~60/61(61时闰秒) |
tm_wday | 一周的第几日 | 0~6(0为周一) |
tm_yday | 一年的第几日 | 1~366(366为儒略历) |
tm_isdst | 夏令时 | 1:夏令时;0:非夏令时;-1:不确定 |
无论是采用浮点数形式还是元组形式表示的时间,其实都不符合人们的认知习惯。为了方便人们理解时间数据,Python提供了用于输出格式化时间字符串的strftime() 和 asctime()函数.
strftime()借助时间格式控制符来输出格式化的时间字符串。
语法格式
strftime(format[ , t ])
format是指代时间格式的字符串,参数t为structural_time对象,默认为当前时间,即localtime()函数返回的时间,该参数可以省略。
# 使用strftime()返回格式化的信息时间
import time
print(time.strftime('%a,%d %b %Y %H:%M:%S'))
# 运行结果
Tue,18 Apr 2023 15:27:25
若只使用部分时间格式控制符,可仅对时间信息中的相关部分进行格式化与输出。
# 只设定控制时分秒的3个格式符
import time
print(time.strftime('%H:%M:%S'))
# 运行结果
Tue,18 Apr 2023 15:27:25
asctime()函数用于输出格式化的时间字符串,但它只将struct_time对象转换为’Tue,18 Apr 2023 15:27:25’这种形式。
语法格式
asctime([ t ])
参数t 与strftime()函数的参数t意义相同
import time
print(time.asctime())
gmtime = time.gmtime()
print(time.asctime(gmtime))
# 运行结果
Tue Apr 18 15:43:06 2023
Tue Apr 18 07:43:06 2023
mktime()函数将struct_time时间对象t转换为时间戳,t代表当地时间。
# 示例代码
import time
t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
secs = time.mktime( t )
print ("time.mktime(t) : %f" % secs)
print ("asctime(localtime(secs)): %s" % time.asctime(time.localtime(secs)))
# 运行结果
time.mktime(t) : 1234861418.000000
asctime(localtime(secs)): Tue Feb 17 17:03:38 2009
时间格式控制符 | 说明 |
---|---|
%Y | 四位数的年份,取值范围为0001~9999 |
%m | 月份(01~12) |
%d | 月中的一天 |
%B | 本地完整的月份名称,比如January |
%b | 本地简化的月份名称,比如Jan |
%a | 本地简化的周日期 |
%A | 本地完整的周日期 |
%H | 24小时制小时数(0~23) |
%l | 12小时制小时数(1~12) |
%p | 上下午,取值为AM或PM |
%M | 分钟数(00~59) |
%S | 秒(00~59) |
ctime()函数用于将一个时间戳(以s为单位的浮点数)转换为“Tue Apr 18 07:43:06 2023”这种形式(结果同time.asctime()),若该函数未接收到参数,则默认以time.time()作为参数。
# 示例
import time
print(time.ctime())
print(time.ctime(34.56))
# 运行结果
Tue Apr 18 17:20:50 2023
Thu Jan 1 08:00:34 1970
striptime()函数用于将格式化的时间字符串转化为struct_time,该函数是strftime()函数的反向操作。
语法格式:
striptime(string,format)
参数string表示格式化的时间字符串,format表示时间字符串的格式,string和format格式必须相统一
使用strptime()函数将格式化的时间字符串转化为struct_time。
sleep()函数可让调用该函数的程序进行睡眠状态,即让其暂时挂起,等待一定时间后,再继续执行。sleep()函数接收一个以s为单位的浮点数作为参数,使用该参数控制进程或线程挂起的时长。
# 示例代码
import time
print('开始')
time.sleep(3.5)
print('结束')
# 运行结果
开始
结束
时间计算通常是指时间的加减。时间可以时间戳形式进行加减运算。
# 示例代码
import time
time_a =time.time()
time.sleep(3.5)
time_b=time.time()
print(time_a +time_b)
print(time_b -time_a)
# 运行结果
3363625416.0357375
3.5003199577331543