time ---时间访问和转换


该模块提供各种与时间相关的功能。有关相关功能,请参见 datetimecalendar 模块。

尽管此模块始终可用,但并非所有平台上的所有功能都可用。此模块中定义的大多数函数都使用相同的名称调用平台C库函数。有时,查阅平台文档可能会有所帮助,因为这些函数的语义在平台之间有所不同。

对一些术语和惯例的解释是正确的。

  • 这个 epoch 是时间开始的点,并且取决于平台。对于Unix,时代是1970年1月1日00:00:00(UTC)。要了解给定平台上的时代,请查看 time.gmtime(0) .

  • 术语 seconds since the epoch 指自纪元以来经过的总秒数,通常不包括 leap seconds . 在所有符合POSIX的平台上,闰秒都不包括在这个总数中。

  • 此模块中的函数可能无法处理纪元之前或将来的很久的日期和时间。未来的临界点由C库决定;对于32位系统,通常是在2038年。

  • 功能 strptime() 如果给定,则可以解析2位年份 %y 格式化代码。解析两位数年份时,它们将根据POSIX和ISO C标准进行转换:值69--99映射到1969--1999,值0--68映射到2000--2068。

  • UTC是协调世界时(以前称为格林威治标准时间或格林威治标准时间)。缩写“UTC”不是一个错误,而是英语和法语之间的妥协。

  • 夏令时是夏令时,在一年中的一段时间内,对时区进行(通常)一小时的调整。DST规则具有魔力(由当地法律决定),可以逐年变化。C库有一个包含本地规则的表(通常是为了灵活性从系统文件中读取的),并且是这方面真正智慧的唯一来源。

  • 各种实时函数的精度可能低于表示其值或参数的单位所建议的精度。例如,在大多数UNIX系统上,时钟每秒只“滴答”50或100次。

  • 另一方面, time()sleep() 比它们的Unix等价物更好:时间用浮点数表示, time() 返回最准确的可用时间(使用Unix gettimeofday() 如果有的话),以及 sleep() 将接受非零分数的时间(Unix select() 用于实现此功能(如果可用)。

  • 返回的时间值 gmtime()localtime()strptime() ,并被接受 asctime()mktime()strftime() ,是9个整数的序列。的返回值 gmtime()localtime()strptime() 还为各个字段提供属性名称。

    struct_time 对于这些对象的描述。

    在 3.3 版更改: 这个 struct_time 扩展了类型以提供 tm_gmtofftm_zone 平台支持对应的属性 struct tm 成员。

    在 3.6 版更改: 这个 struct_time 属性 tm_gmtofftm_zone 现在可在所有平台上使用。

  • 使用以下函数在时间表示之间转换:

    使用

    从新纪元开始的秒数

    struct_time 在UTC中

    gmtime()

    从新纪元开始的秒数

    struct_time 在当地时间

    localtime()

    struct_time 在UTC中

    从新纪元开始的秒数

    calendar.timegm()

    struct_time 在当地时间

    从新纪元开始的秒数

    mktime()

功能

time.asctime([t])

转换元组或 struct_time 表示返回的时间 gmtime()localtime() 到以下形式的字符串: 'Sun Jun 20 23:21:05 1993' . day字段有两个字符长,如果day是一个数字,则用空格填充,例如: 'Wed Jun  9 04:26:40 1993' .

如果 t 未提供,返回的当前时间 localtime() 使用。区域设置信息未被使用 asctime() .

注解

与同名的C函数不同, asctime() 不添加尾随新行。

time.pthread_getcpuclockid(thread_id)

返回 clk_id 指定的线程特定的CPU时间时钟 thread_id .

使用 threading.get_ident()ident 属性 threading.Thread 要为其获取适当值的对象 thread_id .

警告

传递无效或过期的 thread_id 可能导致未定义的行为,如分段错误。

Availability :unix(参见手册页 pthread_getcpuclockid(3) 更多信息)。

3.7 新版功能.

time.clock_getres(clk_id)

返回指定时钟的分辨率(精度) clk_id . 参照 时钟ID常量 对于接受值列表 clk_id .

Availability UNIX。

3.3 新版功能.

time.clock_gettime(clk_id) float

返回指定时钟的时间 clk_id . 参照 时钟ID常量 对于接受值列表 clk_id .

使用 clock_gettime_ns() ,以避免由以下原因造成的精度损失: float 键入。

Availability UNIX。

3.3 新版功能.

time.clock_gettime_ns(clk_id) int

类似 clock_gettime() 但返回时间为纳秒。

Availability UNIX。

3.7 新版功能.

time.clock_settime(clk_id, time: float)

设置指定时钟的时间 clk_id . 目前, CLOCK_REALTIME 是唯一可接受的价值 clk_id .

使用 clock_settime_ns() ,以避免由以下原因造成的精度损失: float 键入。

Availability UNIX。

3.3 新版功能.

time.clock_settime_ns(clk_id, time: int)

类似 clock_settime() 但是用纳秒来设定时间。

Availability UNIX。

3.7 新版功能.

time.ctime([secs])

将从epoch开始以秒为单位的时间转换为形式的字符串: 'Sun Jun 20 23:21:05 1993' 代表当地时间。day字段有两个字符长,如果day是一个数字,则用空格填充,例如: 'Wed Jun  9 04:26:40 1993' .

如果 secs 未提供或 None ,返回的当前时间 time() 使用。 ctime(secs) 等于 asctime(localtime(secs)) . 区域设置信息未被使用 ctime() .

time.get_clock_info(name)

获取作为命名空间对象的指定时钟的信息。支持的时钟名称和读取其值的相应函数为:

结果具有以下属性:

  • 可调True 如果时钟可以自动更改(例如由ntp守护进程更改)或由系统管理员手动更改, False 否则

  • 实施 :用于获取时钟值的基础C函数的名称。参照 时钟ID常量 对于可能的值。

  • 单调的True 如果时钟不能倒转, False 否则

  • 分辨率 :时钟的分辨率(秒) (float

3.3 新版功能.

time.gmtime([secs])

将以秒为单位的时间转换为 struct_time 在UTC中,DST标志始终为零。如果 secs 未提供或 None ,返回的当前时间 time() 使用。一秒钟的分数被忽略。有关 struct_time 对象。见 calendar.timegm() 对于这个函数的倒数。

time.localtime([secs])

类似于 gmtime() 但改为当地时间。如果 secs 未提供或 None ,返回的当前时间 time() 使用。DST标志设置为 1 当DST适用于给定时间时。

time.mktime(t)

这是的反函数 localtime() . 它的参数是 struct_time 或完整的9元组(因为需要DST标志;使用 -1 当DST标志未知时)表示时间 地方的 时间,而不是UTC。它返回一个浮点数,以便与 time() . 如果输入值不能表示为有效时间,则 OverflowErrorValueError 将引发(这取决于无效值是由python还是底层C库捕获)。它可以生成时间的最早日期取决于平台。

time.monotonic() float

返回单调时钟的值(以分数秒为单位),即不能倒计时的时钟。时钟不受系统时钟更新的影响。返回值的引用点未定义,因此只有连续调用结果之间的差异才有效。

使用 monotonic_ns() ,以避免由以下原因造成的精度损失: float 键入。

3.3 新版功能.

在 3.5 版更改: 该功能现在始终可用,并且始终在系统范围内可用。

在 3.10 版更改: 在MacOS上,该功能现在是系统范围的。

time.monotonic_ns() int

类似 monotonic() ,但返回时间为纳秒。

3.7 新版功能.

time.perf_counter() float

返回性能计数器的值(以分数秒为单位),即具有最高可用分辨率的时钟,用于测量短时间。它不包括睡眠期间经过的时间,并且是全系统的。返回值的引用点未定义,因此只有连续调用结果之间的差异才有效。

使用 perf_counter_ns() ,以避免由以下原因造成的精度损失: float 键入。

3.3 新版功能.

在 3.10 版更改: 在Windows上,该函数现在是系统范围的。

time.perf_counter_ns() int

类似 perf_counter() ,但返回时间为纳秒。

3.7 新版功能.

time.process_time() float

返回当前进程的系统和用户CPU时间之和的值(以秒为单位)。不包括睡眠时间。从定义上讲,它是全过程的。返回值的引用点未定义,因此只有连续调用结果之间的差异才有效。

使用 process_time_ns() ,以避免由以下原因造成的精度损失: float 键入。

3.3 新版功能.

time.process_time_ns() int

类似 process_time() 但返回时间为纳秒。

3.7 新版功能.

time.sleep(secs)

在给定的秒数内暂停调用线程的执行。参数可以是一个浮点数,以指示更精确的睡眠时间。由于任何捕获到的信号都将终止 sleep() 执行该信号后,会捕捉到例行程序。此外,由于系统中其他活动的调度,暂停时间可能比任意数量的请求时间长。

在 3.5 版更改: 功能现在至少休眠 secs 即使睡眠被信号中断,除非信号处理程序引发异常(请参见 PEP 475 理由)。

time.strftime(format[, t])

转换元组或 struct_time 表示返回的时间 gmtime()localtime() 到由指定的字符串 格式 参数。如果 t 未提供,返回的当前时间 localtime() 使用。 格式 必须是字符串。 ValueError 如果中有字段,则引发 t 超出允许的范围。

0是时间元组中任何位置的合法参数;如果它通常是非法的,则该值将强制为正确的值。

以下指令可以嵌入到 格式 字符串。它们显示时没有可选的字段宽度和精度规格,而是由 strftime() 结果:

指令

意义

笔记

%a

区域设置的缩写工作日名称。

%A

区域设置的完整工作日名称。

%b

区域设置的缩写月份名称。

%B

区域设置的完整月份名称。

%c

区域设置的适当日期和时间表示。

%d

以十进制表示的月份日期 [01,31] .

%H

小时(24小时制)为十进制数 [00、23] .

%I

小时(12小时时钟)为十进制数 [01,12] .

%j

以十进制表示的一年中的某一天 [001366] .

%m

以十进制表示的月份 [01,12] .

%M

分钟为十进制数 [00,59] .

%p

区域设置相当于AM或PM。

(1)

%S

第二个是十进制数 [00、61] .

(2)

%U

一年中的周数(星期日为一周的第一天)作为十进制数 [00,53] . 新的一年中第一个星期日之前的所有天都被认为是在第0周。

(3)

%w

工作日为十进制数 [0(星期日),6] .

%W

一年中的第几周(星期一为一周的第一天)作为十进制数 [00,53] . 新年第一个星期一之前的所有日子都被认为是在第0周。

(3)

%x

区域设置的适当日期表示。

%X

区域设置的适当时间表示。

%y

没有世纪作为十进制数的年份 [00、99] .

%Y

以世纪为十进制数的年份。

%z

时区偏移量,表示与UTC/GMT的正时差或负时差,格式为+h h m m或-h h m m,其中h表示十进制小时数,m表示十进制分钟数。 [-23:59, +23:59] .

%Z

时区名称(如果不存在时区,则无字符)。

%%

文字的 '%' 性格。

笔记:

  1. 当与 strptime() 函数 %p 指令只影响输出小时字段,如果 %I 指令用于分析小时。

  2. 范围真的是 061 价值 60 在表示的时间戳中有效 leap seconds 价值 61 由于历史原因而得到支持。

  3. 当与 strptime() 函数, %U%W 仅在指定了周和年的日期时用于计算。

下面是一个示例,与中指定的日期兼容的格式 RFC 2822 互联网电子邮件标准。 1 ::

>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
'Thu, 28 Jun 2001 14:17:15 +0000'

在某些平台上可能支持其他指令,但只有此处列出的指令具有ANSI C标准化的含义。要查看平台上支持的完整格式代码集,请参阅 strftime(3) 文档。

在某些平台上,可选的字段宽度和精度规范可以紧跟在初始值之后 '%' 指令的顺序如下;这也是不可移植的。字段宽度通常为2,除了 %j 它在哪里3。

time.strptime(string[, format])

根据格式解析表示时间的字符串。返回值为 struct_time 由返回 gmtime()localtime() .

这个 格式 参数使用的指令与 strftime() ;默认为 "%a %b %d %H:%M:%S %Y" 与返回的格式相匹配 ctime() .如果 string 无法根据分析 格式 ,或者如果解析后数据过多, ValueError 提高了。当无法推断出更准确的值时,用于填充任何缺失数据的默认值为 (1900, 1, 1, 0, 0, 0, 0, 1, -1) .两者都是 string格式 必须是字符串。

例如:

>>> import time
>>> time.strptime("30 Nov 00", "%d %b %y")   
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
                 tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

支持 %Z 指令基于中包含的值 tzname 以及是否 daylight 是真的。因此,它是特定于平台的,除了识别通常已知的UTC和GMT(并且被视为非夏令时时区)。

只支持文档中指定的指令。因为 strftime() 是按平台实现的,有时它可以提供比所列指令更多的指令。但是 strptime() 独立于任何平台,因此不一定支持所有可用的指令,这些指令没有记录为支持的指令。

class time.struct_time

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

索引

属性

价值观

0

tm_year

(例如,1993年)

1

tm_mon

范围 [1, 12]

2

tm_mday

范围 [1, 31]

3

tm_hour

范围 [0, 23]

4

tm_min

范围 [0, 59]

5

tm_sec

范围 [0, 61] 见 (2) 在里面 strftime() 描述

6

tm_wday

范围 [0, 6] 星期一是0

7

tm_yday

范围 [1, 366]

8

tm_isdst

0、1或-1;见下文

不适用

tm_zone

时区名称缩写

不适用

tm_gmtoff

以秒为单位偏移UTC以东

注意,与C结构不同,月份值的范围是 [1, 12] 不是 [0, 11] .

在调用中 mktime()tm_isdst 夏令时有效时可以设置为1,夏令时无效时可以设置为0。值-1表示未知,通常会导致填写正确的状态。

将长度不正确的元组传递给期望 struct_time 或具有错误类型的元素,a TypeError 提高了。

time.time() float

返回自 epoch 作为浮点数。时代的具体日期和对 leap seconds 依赖于平台。在Windows和大多数UNIX系统上,epoch是1970年1月1日,00:00:00(UTC)和闰秒不算在epoch之后的秒数中。这通常被称为 Unix time . 要了解给定平台上的时代,请查看 gmtime(0) .

请注意,尽管时间总是以浮点数返回,但并非所有系统提供的时间精度都高于1秒。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比上一次调用更低的值。

返回的号码 time() 可以通过将其传递到UTC中转换为更常见的时间格式(即年、月、日、小时等) gmtime() 函数或在本地时间传递给 localtime() 功能。在这两种情况下 struct_time 返回对象,从中可以将日历日期的组件作为属性访问。

使用 time_ns() ,以避免由以下原因造成的精度损失: float 键入。

time.time_ns() int

类似 time() 但返回的时间为整数纳秒,因为 epoch.

3.7 新版功能.

time.thread_time() float

返回当前线程的系统和用户CPU时间之和的值(以秒为单位)。不包括睡眠时间。根据定义,它是线程特定的。返回值的引用点未定义,因此只有同一线程中连续调用的结果之间的差异才有效。

使用 thread_time_ns() ,以避免由以下原因造成的精度损失: float 键入。

Availability :支持Windows、Linux、Unix系统 CLOCK_THREAD_CPUTIME_ID .

3.7 新版功能.

time.thread_time_ns() int

类似 thread_time() 但返回时间为纳秒。

3.7 新版功能.

time.tzset()

重置库例程使用的时间转换规则。环境变量 TZ 指定如何执行此操作。它还将设置变量 tzname (来自 TZ 环境变量) timezone (UTC以西非DST秒) altzone (UTC以西的DST秒数)和 daylight (如果此时区没有夏令时规则,则为0;如果夏令时适用,则为时间、过去、现在或将来,则为非零)。

Availability UNIX。

注解

尽管在很多情况下,改变 TZ 环境变量可能会影响函数的输出,例如 localtime() 不调用 tzset() 不应依赖这种行为。

这个 TZ 环境变量不应包含空白。

标准格式 TZ 环境变量为(为了清晰起见添加了空格)::

std offset [dst [offset [,start[/time], end[/time]]]]

其中组件为:

std and dst

三个或三个以上的字母数字表示时区缩写。这些将传播到time.tzname

offset

偏移量的形式如下: ± hh[:mm[:ss]] .这表示为到达UTC而增加的本地时间值。如果前面有“—”,时区在本初子午线以东;否则,时区在以西。如果DST没有偏移,则假定夏季时间比标准时间提前一小时。

start[/time], end[/time]

指示何时改回DST。开始日期和结束日期的格式如下:

Jn

朱利安纪念日 n (1 < n < 365)。闰日不算在内,所以在所有年份中,2月28日是第59天,3月1日是第60天。

n

基于零的儒略日(0<= n < 365)。闰日计算在内,可以参考2月29日。

Mm.n.d

这个 d 第0天 d 周<6) nm 年度(1<= n < 5, 1 = m <=12,其中第5周表示“最后一周” d 月日 m “这可能发生在第四周或第五周)。第一周是 d '第天发生。零日是星期天。

time 格式与 offset 但不允许使用前导符号(“-”或“+”)。如果未指定时间,则默认值为02:00:00。

>>> os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
>>> time.tzset()
>>> time.strftime('%X %x %Z')
'02:07:36 05/08/03 EDT'
>>> os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
>>> time.tzset()
>>> time.strftime('%X %x %Z')
'16:08:12 05/08/03 AEST'

在许多UNIX系统上(包括 * bsd、linux、solaris和darwin),使用系统的zoneinfo更方便 (tzfile(5) )指定时区规则的数据库。为此,请设置 TZ 所需时区数据文件路径的环境变量,相对于系统“zoneinfo”时区数据库的根,通常位于 /usr/share/zoneinfo . 例如, 'US/Eastern''Australia/Melbourne''Egypt''Europe/Amsterdam' . ::

>>> os.environ['TZ'] = 'US/Eastern'
>>> time.tzset()
>>> time.tzname
('EST', 'EDT')
>>> os.environ['TZ'] = 'Egypt'
>>> time.tzset()
>>> time.tzname
('EET', 'EEST')

时钟ID常量

这些常量用作 clock_getres()clock_gettime() .

time.CLOCK_BOOTTIME

相同的 CLOCK_MONOTONIC ,但也包括系统挂起的任何时间。

这允许应用程序获得一个具有暂停意识的单调时钟,而不必处理 CLOCK_REALTIME ,如果使用 settimeofday() 或者类似的。

Availability :Linux 2.6.39或更高版本。

3.7 新版功能.

time.CLOCK_HIGHRES

Solaris操作系统具有 CLOCK_HIGHRES 试图使用最佳硬件源的计时器,其分辨率可能接近纳秒。 CLOCK_HIGHRES 是不可调整的高分辨率时钟。

Availability Solaris。

3.3 新版功能.

time.CLOCK_MONOTONIC

无法设置的时钟,表示自某个未指定的起始点以来的单调时间。

Availability UNIX。

3.3 新版功能.

time.CLOCK_MONOTONIC_RAW

类似 CLOCK_MONOTONIC ,但提供对不受NTP调整影响的原始硬件时间的访问。

Availability :Linux 2.6.28及更高版本、MacOS 10.12及更高版本。

3.3 新版功能.

time.CLOCK_PROCESS_CPUTIME_ID

来自CPU的每个进程计时器的高分辨率。

Availability UNIX。

3.3 新版功能.

time.CLOCK_PROF

来自CPU的每个进程计时器的高分辨率。

Availability :freebsd,netbsd 7或更高版本,openbsd。

3.7 新版功能.

time.CLOCK_TAI

International Atomic Time

系统必须有一个当前的闰秒表才能给出正确的答案。PTP或NTP软件可以维护闰秒表。

Availability :Linux系统。

3.9 新版功能.

time.CLOCK_THREAD_CPUTIME_ID

线程特定的CPU时钟。

Availability UNIX。

3.3 新版功能.

time.CLOCK_UPTIME

绝对值为系统运行和未暂停时间的时间,提供准确的正常运行时间测量,包括绝对值和间隔值。

Availability :freebsd,openbsd 5.5或更高版本。

3.7 新版功能.

time.CLOCK_UPTIME_RAW

一种单调递增的时钟,从任意点开始跟踪时间,不受频率或时间调整的影响,在系统休眠时不递增。

Availability :MacOS 10.12及更高版本。

3.8 新版功能.

以下常量是唯一可以发送到的参数 clock_settime() .

time.CLOCK_REALTIME

全系统实时时钟。设置此时钟需要适当的权限。

Availability UNIX。

3.3 新版功能.

时区常量

time.altzone

本地DST时区的偏移量,以UTC以西的秒为单位(如果已定义)。如果本地DST时区位于UTC东部(如西欧,包括英国),则为负。只有在 daylight 是非零。见下面的注释。

time.daylight

如果定义了DST时区,则非零。见下面的注释。

time.timezone

本地(非DST)时区的偏移量,以UTC以西秒为单位(西欧大部分地区为负,美国为正,英国为零)。见下面的注释。

time.tzname

由两个字符串组成的元组:第一个是本地非DST时区的名称,第二个是本地DST时区的名称。如果没有定义DST时区,则不应使用第二个字符串。见下面的注释。

注解

对于上述时区常量 (altzonedaylighttimezonetzname )该值由模块加载时或最后一次有效的时区规则确定。 tzset() 被调用,在过去可能多次出错。建议使用 tm_gmtofftm_zone 结果来自 localtime() 获取时区信息。

参见

模块 datetime

更面向对象的日期和时间接口。

模块 locale

国际化服务。区域设置影响中许多格式说明符的解释 strftime()strptime() .

模块 calendar

常规日历相关功能。 timegm() 是的反义词 gmtime() 从这个模块。

脚注

1

%Z 现在已弃用,但 %z 所有ansi c c库不支持扩展到首选小时/分钟偏移量的转义。另外,严格阅读1982年的原著 RFC 822 标准要求一个两位数的年份(Y而不是Y),但实践在2000年之前就已经移到了四位数的年份。之后, RFC 822 已过时,4位数年份已由 RFC 1123 然后由 RFC 2822 .