目录
- 一、time模块介绍
- 二、常用方法
- 2.1 时间戳
- 2.2 时间元组
- 2.3 格式化的时间字符串
- 2.4 altzone常量——获取夏令时时区的偏移量(秒为单位)
- 2.5 daylight常量——获取是否定义了夏令时
- 2.6 timezone常量——获取非夏令时时区的偏移量(秒为单位)
- 2.7 tzname常量——返回标准时区名称与夏令时时区名称所组成的元组
- 2.8 asctime()方法——接收时间元组并返回一个字符串
- 2.9 time_ns()方法——返回当前时间的 时间戳(纳秒)
- 2.10 time()方法——返回当前时间的时间戳
- 2.11 strptime()方法——把时间字符串转为时间元组
- 2.12 strftime()方法——把日期格式转为字符串格式
- 2.13 sleep()方法——按指定的秒数使程序休眠若干时间
- 2.14 perf_counter_ns()方法——获取性能计数器的(纳秒)值
- 2.15 perf_counter()方法——获取性能计数器的(秒)值
- 2.16 monotonic()方法——获取单调时钟的值
- 2.17 monotonic_ns()方法——获取单调时钟的(纳秒)值
- 2.18 mktime()方法——接收时间元组并返回时间戳
- 2.19 localtime()方法——接收时间戳并返回本地时间的时间元组
- 2.20 gmtime()方法——接收时间戳并返回UTC时区的时间元组
- 2.21 get_clock_info()方法——获取指定时钟以命名空间对象形式的信息
- 2.22 ctime()方法——接收时间戳并返回一个字符串
一、time模块介绍
time 模块提供了各种时间相关的函数,该模块中对于时间表示的格式有如下三种:
- 时间戳(timestamp):时间戳表示的是从 1970年1月1日00:00:00 开始按秒计算的偏移量。
- 时间元组(struct_time):共有九个元素,分别为:年、月、日、时、分、秒、一周中的第几日、一年中的第几日、夏令时。
- 格式化时间字符串(format time):已格式化的结构使时间更具可读性,包括自定义格式和固定格式。
二、常用方法
2.1 时间戳
时间戳(timestamp)表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量,也就是指格林尼治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(即北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数,它返回的是 float 类型。但是在 1970 年之前的日期就无法用时间戳来表示,太遥远的日期也无法用时间戳表示,且 UNIX 和 Windows 只支持到 2038 年。
示例:通过time模块中time()方法获取当前时间的时间戳,导入time模块,然后通过time模块调用time()方法获取当前时间的时间戳,代码如下:
import time # 导入time模块
# 1729175530.6883082
print(time.time()) # 获取当前时间的时间戳
2.2 时间元组
在 Python 中,使用 9 个元素组成的元组来处理时间,我们称之为时间元组(struct_time 元组)。时间元组中 9 个元素分别为:年、月、日、时、分、秒、一周中的第几日、一年中的第几日、夏令时。struct_time 元组的含义及属性如下表所示:
示例:通过time模块中localtime()方法获取当地时间的时间元组.代码如下:
import time # 导入time模块
# time.struct_time(tm_year=2024, tm_mon=10, tm_mday=17, tm_hour=22,
# tm_min=36, tm_sec=13, tm_wday=3, tm_yday=291, tm_isdst=0)
print(time.localtime()) # 接收时间戳并返回当地时间的时间元组
# 当前时间为: 2024年,10月,17,日,22时,36分,13秒,星期四,一年中的第291 天,不是夏令时
2.3 格式化的时间字符串
Python 中一些常用的时间日期格式化符号如下表所示:
完整英文星期名称和简写英文星期名称如表3所示:
完整英文月份名称和简写英文月份名称如表4所示:
示例:通过time模块中strftime()方法来格式化日期与时间。导入time模块,然后调用time模块的strftime()方法按“年-月-日 时:分:秒”格式输出日期时间,代码如下:
import time # 导入time模块
# 2024-10-17 22:42:19
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 打印年-月-日 时:分:秒
2.4 altzone常量——获取夏令时时区的偏移量(秒为单位)
altzone 常量用于获取本地夏令时的偏移秒数,如果该地区在 UTC 东部会返回负值(如西欧,包括英国),且对夏令时启用的地区才可以使用。语法格式如下:
time.altzone # 返回值: 返回本地夏令时的偏移秒数
示例代码:
import time # 导入time模块
# 本地夏令时的偏移秒数为: -32400
print('本地夏令时的偏移秒数为: ', time.altzone)
2.5 daylight常量——获取是否定义了夏令时
daylight 常量用于获取是否定义了夏令时时区。语法格式如下:
time.daylight # 参数说明: 返回值: 如果定义了夏令时的时区将返回1;否则返回0
先将计算机系统时间设置为正处于夏令时的时区,如下图所示:
示例代码:
import time # 导入time模块
# 确认定义夏令时时区的返回值为: 1
print('确认定义夏令时时区的返回值为:', time.daylight)
2.6 timezone常量——获取非夏令时时区的偏移量(秒为单位)
timezone 常量用于获取本地非夏令时的偏移秒数(西欧大部分地区与亚洲为负,美国为正,英国为零),且对非夏令时的地区才可以使用。语法格式如下:
time.timezone # 返回值: 返回非夏令时时区的偏移秒数
示例代码:
import time # 导入time模块
# 北京非夏令时时区的偏移量为: -28800 秒
print('北京非夏令时时区的偏移量为:', time.timezone, '秒')
2.7 tzname常量——返回标准时区名称与夏令时时区名称所组成的元组
tzname 常量用于获取包含两个字符串的元组,该元组中的第一个值为本地非夏令时时区名称,第二个值为本地夏令时时区名称。语法格式如下:
time.tzname # 返回值: 返回标准时区名称与夏令时时区名称所组成的元组
示例代码:
import time # 导入time模块
tz = time.tzname # 获取计算机当前标准时区与夏令时时区名称
print('返回的元组信息为: ', tz)
# 由于返回的元组信息为乱码,所以需要进行编码后输出
print('标准时区名称为: ', tz[0]) # 标准时区名称为: 中国标准时间
print('夏令时时区名称为: ', tz[1]) # 夏令时时区名称为: 中国夏令时
2.8 asctime()方法——接收时间元组并返回一个字符串
asctime() 方法用于接收时间元组,并返回一个可读长度为 24 个字符的字符串,语法格式如下:
In [135]: time.asctime?
Docstring:
asctime([tuple]) -> string
Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'.
When the time tuple is not present, current time as returned by localtime()
is used.
Type: builtin_function_or_method
参数说明:
1.t: 表示完整的9位元素元组或者通过方法localtime()方法或gmtime()方法返回的时间值。
参数为空时,默认以time.localtime()的值为参数,所得到的是当前时间。
2.返回值: 返回一个字符串,格式为: Www Mmm dd hh:mm:ss yyyy。
其中Www为星期、Mmm为月份、dd 为日、hh 为时、mm 为分、ss 为秒、yyyy 为年份。
示例:
import time # 导入time模块
t = (2024, 10, 17, 23, 1, 54, 3, 347, 0) # 创建一个名称为t的时间元组
# Thu Oct 17 23:01:54 2024
print('指定时间元组: ', time.asctime(t)) # 指定时间元组
# Thu Oct 17 23:01:51 2024
print('默认时间元组: ', time.asctime()) # 参数为空
# Thu Oct 17 15:01:51 2024
print('UTC时区的时间元组: ', time.asctime(time.gmtime())) # 设置参数为time.gmtime()
2.9 time_ns()方法——返回当前时间的 时间戳(纳秒)
time 模块中的 time_ns() 方法与 time() 方法类似,用于返回以纳秒为单位的时间戳。语法格式如下:
In [136]: time.time_ns?
Docstring:
time_ns() -> int
Return the current time in nanoseconds since the Epoch.
Type: builtin_function_or_method
参数说明:
1.返回值: 返回以纳秒为单位的时间戳
示例:
import time # 导入time模块
# 1729177466108660900
print('当前时间戳的纳秒值为: ', time.time_ns())
2.10 time()方法——返回当前时间的时间戳
time 模块中的 time() 方法用于返回当前时间的时间戳。语法格式如下:
示例:
import time # 导入time模块
# 1.通过time 模块中time() 方法获取当前时间戳的显示范围
print('取整后的时间戳为: ', int(time.time())) # 对时间戳取整 1729177621
print('小数点后两位的时间戳为: ', '%.2f' % time.time()) # 打印小数点后两位的时间戳 1729177621.21
# 2.获取时间戳的毫秒数并四舍五入后取整
millis = time.time() * 1000 # 获取时间戳毫秒数
millis_int = int(round(time.time() * 1000)) # 四舍五入并取整
print('时间戳的毫秒为: ', millis) # 1729177660660.3252
print('四舍五入取整后: ', millis_int) # 1729177660660
# 3. 通过time()方法计算一段代码的运行时间
start_time = time.time() # 记录开始时间
for i in range(1000001): # 循环输出0~1000000
print(i)
end_time = time.time() # 记录结束时间
run_time = end_time - start_time # 计算运行时间
print('运行时间: ', run_time) # 打印运行时间 运行时间: 3.329134702682495
2.11 strptime()方法——把时间字符串转为时间元组
strptime() 方法用于根据指定的格式把一个时间字符串转为时间元组,语法格式如下:
参数说明:
- string:表示时间字符串
- format:表示时间字符串所对应的格式,格式符号参考 2.3 格式化的时间字符串 小节中的表2
- 返回值:返回 struct_time 对象
示例:
import time # 导入time模块
# time.struct_time(tm_year=2020, tm_mon=7, tm_mday=29, tm_hour=21, tm_min=36,
# tm_sec=54, tm_wday=2, tm_yday=211, tm_isdst=-1)
print(time.strptime("2020-07-29 21:36:54", "%Y-%m-%d %H:%M:%S")) # 将时间字符串转为时间元组
2.12 strftime()方法——把日期格式转为字符串格式
strftime() 方法用于格式化日期,把日期格式转换为字符串格式。该方法可以接收时间元组或者 struct_time(如由 localtime() 或 gmtime() 返回的),按照指定格式转换为字符串格式,格式由参数 format 决定。语法格式如下:
参数说明:
- format:时间字符串所对应的格式,格式符号参考 2.3 格式化的时间字符串 小节中的表2
- t:可选参数,一个 struct_time 对象。如果没有提供 t,则使用 localtime() 返回的当前时间
- 返回值:返回以可读字符串表示的时间
示例代码:
import time # 导入time模块
# 1.输出不同格式的年、月、日
print(time.strftime('%Y,%m,%d')) # 输出年,月,日
print(time.strftime('%Y/%m/%d')) # 输出年/月/日
print(time.strftime('%Y-%m-%d')) # 输出年-月-日
# 2.格式化输出日期、时间、星期及月份
print(time.strftime('%Y-%m-%d %H:%M:%S %A %B')) # %A输出英文星期全称,%B输出英文月份全称
print(time.strftime('%Y-%m-%d %H:%M:%S %a %b')) # %a输出英文星期简称,%b输出英文月份简称
# 3.格式化多种时间对象
t = (2020, 12, 13, 21, 36, 54, 3, 347, 0) # 创建一个名称为t的时间元组
# 根据提供的时间元组获取年-月-日 时:分:秒
print(time.strftime('%Y-%m-%d %H:%M:%S', t))
# 根据localtime()返回的时间获取年 月 日 时 分 秒
print(time.strftime('%Y %m %d %H %M %S', time.localtime()))
# 根据gmtime()返回的时间获取年,月,日 时:分:秒
print(time.strftime('%Y,%m,%d %H:%M:%S', time.gmtime()))
2.13 sleep()方法——按指定的秒数使程序休眠若干时间
sleep() 方法的作用是休眠,使程序按指定的秒数休眠若干时间。语法格式如下:
参数说明:
- secs:休眠执行的秒数。secs 以秒为单位,如果想定时毫秒,可以使用小数,以便指示更精确地暂停时间。如 0.1 秒,则代表暂停 100 毫秒。
- 返回值:无
示例代码:
import time # 导入time模块
time.sleep(5) # 延迟5秒
print('人生苦短,我用Python!')
# 输出休眠前与休眠后的本地时间所对应的字符串
print(time.ctime()) # 输出表示本地时间的字符串 Thu Oct 17 23:17:52 2024
time.sleep(10) # 休眠10秒
print(time.ctime()) # 休眠10后输出表示本地时间的字符串 Thu Oct 17 23:18:02 2024
2.14 perf_counter_ns()方法——获取性能计数器的(纳秒)值
perf_counter_ns() 方法用于获取一个性能计数器的(纳秒)值,包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以只有连续调用的结果之间的差才是有效的。语法格式如下:
参数说明:
- 返回值:返回一个性能计数器的(纳秒)值
示例代码:
import time # 导入time模块
def procedure(): # 定义函数
a = 0 # 定义变量
for i in range(1000000): # 循环
a += i # 循环增加变量
print(a) # 打印当前变量值
start_time = time.perf_counter_ns() # 第一次调用perf_counter_ns()方法
procedure() # 调用循环增加变量的函数
# 函数的运行时间为: 3437786400 纳秒
print('函数的运行时间为:', time.perf_counter_ns() - start_time, '纳秒') # 打印函数运行的时间
2.15 perf_counter()方法——获取性能计数器的(秒)值
perf_counter() 方法用于获取一个性能计数器的(秒)值,包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以只有连续调用的结果之间的差才是有效的。语法格式如下:
参数说明:
- 返回值:返回一个性能计数器的(秒)值
示例代码:
import time # 导入time模块
def procedure(): # 定义函数
a = 0 # 定义变量
for i in range(1000000): # 循环
a += i # 循环增加变量
print(a) # 打印当前变量值
start_time = time.perf_counter() # 第一次调用perf_counter()方法
procedure() # 调用循环增加变量的函数
# 函数的运行时间为: 3.5039622000185773 秒
print('函数的运行时间为:', time.perf_counter() - start_time, '秒') # 打印函数运行的时间
2.16 monotonic()方法——获取单调时钟的值
monotonic() 方法用于获取一个单调时钟的值(以浮点类型的秒为单位)。该值为不能倒退的时钟值,并且该值不会受到系统时钟更新后的影响。语法格式如下:
参数说明:
- 返回值:返回一个单调时钟的值
示例代码:
import time # 导入time模块
start_time = time.monotonic() # 第一次调用
time.sleep(2) # 休眠2秒
end_time = time.monotonic() # 第二次调用
print('第一次返回的单调时钟值为: ', start_time) # 666208.265
print('第二次返回的单调时钟值为: ', end_time) # 666210.281
print('计算的休眠时间为: ', end_time - start_time) # 2.015999999945052
2.17 monotonic_ns()方法——获取单调时钟的(纳秒)值
monotonic_ns() 方法用于获取一个单调时钟的值(以浮点类型的纳秒为单位)。该值为不能倒退的时钟值,并且该值不会受到系统时钟更新的影响。语法格式如下:
参数说明:
- 返回值:返回一个单调时钟的(纳秒)值
示例代码:
import time # 导入time模块
start_time = time.monotonic_ns() # 第一次调用
time.sleep(2) # 休眠2秒
end_time = time.monotonic_ns() # 第二次调用
print('第一次返回的单调时钟纳秒值为: ', start_time) # 666116687000000
print('第二次返回的单调时钟纳秒值为: ', end_time) # 666118687000000
print('计算休眠时间的纳秒为: ', end_time - start_time) # 2000000000
2.18 mktime()方法——接收时间元组并返回时间戳
mktime() 方法用于以时间元组作为参数并返回时间戳。语法格式如下:
参数说明:
- t:结构化的时间或者完整的9位元素元组
- 返回值:返回用秒数来表示时间的浮点数
示例代码:
import time # 导入time模块
t = (2018, 12, 13, 21, 36, 54, 3, 347, 0) # 创建一个名称为t的时间元组
print(time.mktime(t)) # 以时间元组作为参数并返回时间戳 1544708214.0
t = time.localtime() # 获取本地当前时间的时间元组
# time.struct_time(tm_year=2024, tm_mon=10, tm_mday=17, tm_hour=23,
# tm_min=28, tm_sec=21, tm_wday=3, tm_yday=291, tm_isdst=0)
print('本地当前时间的时间元组为: ', t) # 输出本地当前时间的时间元组
# 返回的时间戳为: 1729178901.0
print('返回的时间戳为: ', time.mktime(t)) # 以本地当前时间的时间元组为参数返回时间戳
2.19 localtime()方法——接收时间戳并返回本地时间的时间元组
localtime() 方法用于将时间戳转换为本地时间的时间元组。语法格式如下:
参数说明:
- secs:转换为 time.struct_time 类型的对象的秒数。如果 secs 参数未提供或为 None,则返回当前时间(即默认调用 time.time() )
- 返回值:返回指定时间戳对应的本地时间的时间元组
示例代码:
import time # 导入time模块
print(time.localtime()) # 打印本地当前时间的时间元组
print(time.localtime(time.time())) # 以time.time()返回的时间戳为参数获取本地时间的时间元组
print(time.localtime(1584773763.789422)) # 将给定的时间戳转换为当地时间的时间元组
t = time.localtime() # localtime()方法获取本地当前时间的时间元组
print('本地当前时间的时间元组为: ', t) # 打印本地当前时间的时间元组
print('属性名获取的年份为: ', t.tm_year, "年") # 通过".属性名"的方式获取年份
print('下标索引获取的月份为: ', t[1], "月") # 通过下标索引获取月份
2.20 gmtime()方法——接收时间戳并返回UTC时区的时间元组
gmtime() 方法用于将一个时间戳转换为 UTC 时区(0 时区)的时间元组,返回 time.struct_time 类型的对象。语法格式如下:
参数说明:
- secs:转换为 time.struct_time 类型的对象的秒数,其默认值为 time.time()
- 返回值:返回指定时间戳所对应 UTC 时区的时间元组
示例代码:
import time # 导入time模块
print('本地时间的时间元组为: ', time.localtime())
print('UTC时区的时间元组为: ', time.gmtime())
ps:UTC(Coordinated Universal Time)是世界协调时间(又称世界标准时间、世界统一时间),世界协调时间以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。gmtime() 方法和 localtime() 方法类似,都能返回时间元组。localtime() 方法返回的是当前时区的时间元组,而 gmtime() 方法返回的是 UTC 时区(0 时区)的时间元组。与 UTC 时间对应的就是各个时区的本地时间,东 N 区的时间比 UTC 时间早 N 个小时,因此,UTC 时间 +N 小时即为东 N 区的本地时间;而西 N 区时间比 UTC 时间晚 N 个小时,因此,UTC 时间 -N 小时即为西 N 区的本地时间。中国在东 8 区,因此比 UTC 时间早8 小时,可以以 UTC+8 表示。
2.21 get_clock_info()方法——获取指定时钟以命名空间对象形式的信息
get_clock_info() 方法用于获取指定时钟以命名空间对象形式的信息。语法格式如下:
参数说明:
- name:该参数为需要获取的指定时钟方法的名称,其类型为字符类型。如获取 time() 方法对应的命名空间对象信息时,只需填写字符型名称
'time'
即可 - 返回值:返回指定时钟以命名空间对象形式的信息
示例代码:
import time # 导入time模块
time_namespace = time.get_clock_info('time') # 获取time()方法的时钟信息
# namespace(implementation='GetSystemTimeAsFileTime()', monotonic=False, adjustable=True,
# resolution=0.015625)
'''
adjustable: 如果时钟可以自动更改(例如通过NTP 守护程序)或由系统管理员手动更改,则为True;否则为False
implementation: 用于获取时钟值的底层C函数的名称。关于可能的值,请参考时钟ID 常量。
monotonic: 如果时钟不能倒退,则为True ;否则为False。
resolution: 以秒为单位的时钟分辨率(float)。
'''
print(time_namespace)
# 常见时钟方法名称
time_list = ['time', 'thread_time', 'process_time', 'perf_counter', 'monotonic']
for i in time_list: # 循环遍历每个时钟方法对应的名称
print(i, '方法的时钟信息为:\n', time.get_clock_info(i)) # 打印每个时钟方法的信息
2.22 ctime()方法——接收时间戳并返回一个字符串
ctime() 方法用于以时间戳为参数,返回一个字符串。语法格式如下:
参数说明:
- secs:要转换为字符串时间的秒数。如果没有参数或参数为 None,将默认以 time.time() 方法的时间戳作为参数,此时,ctime() 方法的的作用相当于 asctime(localtime(secs)) 方法
- 返回值:返回一个字符串。
示例代码:
import time # 导入time模块
# Thu Oct 17 23:43:34 2024
print(time.ctime()) # 使用ctime()方法输出表示本地时间的字符串
# Thu Oct 17 23:43:34 2024
print(time.asctime()) # 使用asctime()方法输出表示本地时间的字符串
# Wed May 13 23:23:37 2020
print(time.ctime(1589383417.9643884)) # 打印指定时间戳对应的字符串