0%

『Python基础』time详解

time

本文是关于 Python 中 time 库的一些介绍说明。time 库是 Python 自带的一个常用的与时间有关的库。

1
2
import time
print(time.strftime("%Y.%m.%d %H:%M:%S")) # 2022.07.12 14:48:35

struct_time

一个带有 named tuple 接口的对象:可以通过索引和属性名访问值。 返回的时间值序列的类型为 gmtime()localtime()strptime() 。存在以下值:

索引 属性
0 tm_year (例如,1993)
1 tm_mon range [1, 12]
2 tm_mday range [1, 31]
3 tm_hour range [0, 23]
4 tm_min range [0, 59]
5 tm_sec range [0, 61]
6 tm_wday range [0, 6] ,周一为 0
7 tm_yday range [1, 366]
8 tm_isdst 0, 1 或 -1;如下所示
N/A tm_zone 时区名称的缩写
N/A tm_gmtoff 以秒为单位的UTC以东偏离

示例

1
2
tim = time.localtime()
# time.struct_time(tm_year=2022, tm_mon=1, tm_mday=16, tm_hour=14, tm_min=18, tm_sec=42, tm_wday=6, tm_yday=16, tm_isdst=0)

格式转换

  • struct_time -> str
    • time.asctime([t]) :转换由 gmtime()localtime() 所返回表示时间的元组或 struct_time 为以下形式的字符串: 'Sun Jun 20 23:21:05 1993'。如果未提供 t ,则会使用 localtime() 所返回的当前时间。
    • time.mktime(t) :这是 localtime() 的反函数。参数是 struct_time 或者完整的 9 元组(因为需要 dst 标志;如果它是未知的则使用 -1 作为dst标志),它表示 local 的时间,而不是 UTC 。返回一个浮点数
    • time.strftime(format[, t]) :转换一个元组或 struct_time 表示的由 gmtime()localtime() 返回的时间到由 format 参数指定的字符串。如果未提供 t ,则使用由 localtime() 返回的当前时间。
  • Seconds -> str
    • time.ctime([secs]) :转换以距离初始纪元的秒数表示的时间为以下形式的字符串: 'Sun Jun 20 23:21:05 1993' 代表本地时间。 日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun 9 04:26:40 1993'。如果 secs 未提供或为 None ,则使用 time() 所返回的当前时间。 ctime(secs) 等价于 asctime(localtime(secs))
    • time.gmtime([secs]) :将以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time ,如果未提供 secs 或为 None ,则使用 time() 所返回的当前时间。 一秒以内的小数将被忽略。
  • str -> struct_time
    • time.strptime(string[, format]) :根据格式解析表示时间的字符串。 返回值为一个被 gmtime()localtime() 返回的 struct_time

格式化参数

指令 含意
%a 本地化的缩写星期中每日的名称。
%A 本地化的星期中每日的完整名称。
%b 本地化的月缩写名称。
%B 本地化的月完整名称。
%c 本地化的适当日期和时间表示。
%d 十进制数 [01,31] 表示的月中日。
%H 十进制数 [00,23] 表示的小时(24小时制)。
%I 十进制数 [01,12] 表示的小时(12小时制)。
%j 十进制数 [001,366] 表示的年中日。
%m 十进制数 [01,12] 表示的月。
%M 十进制数 [00,59] 表示的分钟。
%p 本地化的 AM 或 PM 。当与 strptime() 函数一起使用时,如果使用 %I 指令来解析小时, %p 指令只影响输出小时字段。
%S 十进制数 [00,61] 表示的秒。
%U 十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。
%w 十进制数 [0(星期日),6] 表示的周中日。
%W 十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。
%x 本地化的适当日期表示。
%X 本地化的适当时间表示。
%y 十进制数 [00,99] 表示的没有世纪的年份。
%Y 十进制数表示的带世纪的年份。
%% 字面的 '%' 字符。

备注:当与 strptime() 函数一起使用时, %U%W 仅用于指定星期几和年份的计算。

示例:

1
2
strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
# 'Thu, 28 Jun 2001 14:17:15 +0000'

获取时间

  • time.localtime([secs]) :与 gmtime() 相似但转换为当地时间。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。
  • time.time() → float :返回以浮点数表示的从 epoch 开始的秒数的时间值。
    • epoch 的具体日期和 leap seconds 的处理取决于平台。
    • 在 Windows 和大多数 Unix 系统中, epoch 是 1970 年 1 月 1 日 00:00:00 (UTC),并且闰秒将不计入从 epoch 开始的秒数。 这通常被称为 Unix 时间。
    • 要了解给定平台上 epoch 的具体定义,请查看 gmtime(0)
    • 返回的数字可以通过将其传递给 gmtime() 函数或转换为UTC中更常见的时间格式(即年、月、日、小时等)或通过将它传递给 localtime() 函数获得本地时间。在这两种情况下都返回一个 struct_time 对象,日历日期组件可以从中作为属性访问。
  • time.time_ns() → int :与 time() 相似,但返回时间为用整数表示的自 epoch 以来所经过的纳秒数。

计时器

  • time.monotonic() → float :(以小数表示的秒为单位)返回一个单调时钟的值,即不能倒退的时钟。 该时钟不受系统时钟更新的影响。 返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。
  • time.monotonic_ns() → int :与 monotonic() 相似,但是返回时间为纳秒数。
  • time.perf_counter() → float :(以小数表示的秒为单位)返回一个性能计数器的值,即用于测量较短持续时间的具有最高有效精度的时钟。 它会包括睡眠状态所消耗的时间并且作用于全系统范围。 返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。
  • time.perf_counter_ns() → int :与 perf_counter() 相似,但是返回时间为纳秒。
  • time.process_time() → float :(以小数表示的秒为单位)返回当前进程的系统和用户 CPU 时间的总计值。 它不包括睡眠状态所消耗的时间。 根据定义它只作用于进程范围。 返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。
  • time.process_time_ns() → int :与 process_time() 相似,但是返回时间为纳秒。
  • time.process_time() → float :(以小数表示的秒为单位)返回当前进程的系统和用户 CPU 时间的总计值。 它不包括睡眠状态所消耗的时间。 根据定义它只作用于进程范围。 返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。
  • time.process_time_ns() → int :与 process_time() 相似,但是返回时间为纳秒。
  • time.thread_time() → float :(以小数表示的秒为单位)返回当前线程的系统和用户 CPU 时间的总计值。 它不包括睡眠状态所消耗的时间。 根据定义它只作用于线程范围。 返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。
  • time.thread_time_ns() → int :与 thread_time() 相似,但返回纳秒时间。

函数

  • time.sleep(secs) :调用该方法的线程将被暂停执行 secs 秒。参数可以是浮点数,以表示更为精确的睡眠时长。

参考资料

--- ♥ end ♥ ---

欢迎关注我呀~