time
---时间访问和转换¶
该模块提供各种与时间相关的功能。有关相关功能,请参见 datetime
和 calendar
模块。
尽管此模块始终可用,但并非所有平台上的所有功能都可用。此模块中定义的大多数函数都使用相同的名称调用平台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()
返回最准确的可用时间(使用Unixgettimeofday()
如果有的话),以及sleep()
将接受非零分数的时间(Unixselect()
用于实现此功能(如果可用)。返回的时间值
gmtime()
,localtime()
和strptime()
,并被接受asctime()
,mktime()
和strftime()
,是9个整数的序列。的返回值gmtime()
,localtime()
和strptime()
还为各个字段提供属性名称。见
struct_time
对于这些对象的描述。在 3.3 版更改: 这个
struct_time
扩展了类型以提供tm_gmtoff
和tm_zone
平台支持对应的属性struct tm
成员。在 3.6 版更改: 这个
struct_time
属性tm_gmtoff
和tm_zone
现在可在所有平台上使用。使用以下函数在时间表示之间转换:
从
到
使用
从新纪元开始的秒数
struct_time
在UTC中从新纪元开始的秒数
struct_time
在当地时间struct_time
在UTC中从新纪元开始的秒数
struct_time
在当地时间从新纪元开始的秒数
功能¶
- 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)¶
获取作为命名空间对象的指定时钟的信息。支持的时钟名称和读取其值的相应函数为:
'monotonic'
:time.monotonic()
'perf_counter'
:time.perf_counter()
'process_time'
:time.process_time()
'thread_time'
:time.thread_time()
'time'
:time.time()
结果具有以下属性:
可调 :
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()
. 如果输入值不能表示为有效时间,则OverflowError
或ValueError
将引发(这取决于无效值是由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
时区名称(如果不存在时区,则无字符)。
%%
文字的
'%'
性格。笔记:
当与
strptime()
函数%p
指令只影响输出小时字段,如果%I
指令用于分析小时。范围真的是
0
到61
价值60
在表示的时间戳中有效 leap seconds 价值61
由于历史原因而得到支持。当与
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
或具有错误类型的元素,aTypeError
提高了。
- 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.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
环境变量为(为了清晰起见添加了空格)::std offset [dst [offset [,start[/time], end[/time]]]]
其中组件为:
std
anddst
三个或三个以上的字母数字表示时区缩写。这些将传播到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) n 月 m 年度(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¶
-
系统必须有一个当前的闰秒表才能给出正确的答案。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时区,则不应使用第二个字符串。见下面的注释。
注解
对于上述时区常量 (altzone
, daylight
, timezone
和 tzname
)该值由模块加载时或最后一次有效的时区规则确定。 tzset()
被调用,在过去可能多次出错。建议使用 tm_gmtoff
和 tm_zone
结果来自 localtime()
获取时区信息。
参见
- 模块
datetime
更面向对象的日期和时间接口。
- 模块
locale
国际化服务。区域设置影响中许多格式说明符的解释
strftime()
和strptime()
.- 模块
calendar
脚注