Python time模块全解析:从时间戳到时区与格式化输出

一颗松果
一颗松果
发布时间:2026-10-12| 3人浏览过
原创

本文深入解析Python内置time模块,涵盖时间戳定义、五大时钟函数特性对比及测试方法,详解GMT、UTC等时区概念,并系统讲解struct_time数据结构、时间格式化strftime与解析strptime函数的使用,帮助开发者高效处理时间相关操作。

无参数函数

首先明确时间戳的定义:它表示自1970年1月1日00:00:00(UTC)以来所经历的秒数。基于这一概念,可以更容易理解后续涉及的各类时间函数。以下代码默认

from time import *

implementation monotonic adjustable resolution
'time' GetSystemTimeAsFileTime() False True 0.015625
'thread_time' GetThreadTimes() True False 1e-07
'process_time' GetProcessTimes() True False 1e-07
'monotonic' GetTickCount64() True False 0.015625
'perf_counter' QueryPerformanceCounter() True False 1e-07

在上述五组时钟函数中,仅time.time()返回的值具备绝对时间意义,其余函数返回的值均仅具有相对意义。

利用get_clock_info函数可查询各时钟的具体特性,其输入参数与输出结果分别如下所示。

implementation monotonic adjustable resolution
'time' GetSystemTimeAsFileTime() False True 0.015625
'thread_time' GetThreadTimes() True False 1e-07
'process_time' GetProcessTimes() True False 1e-07
'monotonic' GetTickCount64() True False 0.015625
'perf_counter' QueryPerformanceCounter() True False 1e-07

其中,

  • 若时钟支持自动调整或由系统管理员手动修改,则adjustable字段为True,否则为False。
  • implementation字段表示获取时钟值所依赖的基础C函数名称。
  • 若时钟数值不可倒退,则monotonic字段为True,否则为False。
  • resolution字段表示时钟的时间分辨率,单位为秒。

接下来通过实际测试验证上述时钟的特性表现。

>>> def test(n):
...   aTime = time.time()
...   aTh = time.thread_time()
...   aPr = time.process_time()
...   aMo = time.monotonic()
...   aPe = time.perf_counter()
...   for i in range(int(n)): j = i**2
...   bTime = time.time()
...   bTh = time.thread_time()
...   bPr = time.process_time()
...   bMo = time.monotonic()
...   bPe = time.perf_counter()
...   aStr = f'aTime={aTime},aTh={aTh},aPr={aPr},aMo={aMo},aPe={aPe}\n'
...   bStr = f'bTime={bTime},bTh={bTh},bPr={bPr},bMo={bMo},bPe={bPe}'
...   print(aStr+bStr)
...
>>> test(1e6)
aTime=1634625786.136904,aTh=0.03125,aPr=0.03125,aMo=199082.078,aPe=199085.4751224
bTime=1634625786.340363,bTh=0.234375,bPr=0.234375,bMo=199082.281,bPe=199085.6787309
>>> test(1e6)
aTime=1634625789.7817287,aTh=0.234375,aPr=0.234375,aMo=199085.734,aPe=199089.1195357
bTime=1634625789.981198,bTh=0.421875,bPr=0.421875,bMo=199085.921,bPe=199089.3195721
>>> test(1e6)
aTime=1634625796.3934195,aTh=0.421875,aPr=0.421875,aMo=199092.343,aPe=199095.731209
bTime=1634625796.5789576,bTh=0.609375,bPr=0.609375,bMo=199092.531,bPe=199095.9172852
>>>

测试结果显示,在调用test函数的执行间隔内,thread_time与process_time的返回值并未发生变化,这表明这两个函数在计算时不包含线程或进程休眠期间的时间消耗。

在time模块的实际应用中,最常用的两个函数是time.time()和time.sleep()。前者用于获取当前时间戳,常用于统计程序运行耗时;后者则用于暂停当前线程的执行。

可以通过调用time.thread_time()来验证sleep函数的具体行为与效果。

>>> def test(n):
...    aTime = time.time()
...    aTh = time.thread_time()
...    aPr = time.process_time()
...    time.sleep(n)
...    bTime = time.time()
...    bTh = time.thread_time()
...    bPr = time.process_time()
...    aStr = f'aTime={aTime},aTh={aTh},aPr={aPr}\n'
...    bStr = f'bTime={bTime},bTh={bTh},bPr={bPr}'
...    print(aStr+bStr)
...
>>> test(1)
aTime=1634649370.2819958,aTh=0.640625,aPr=0.640625
bTime=1634649371.2862759,bTh=0.640625,bPr=0.640625
>>> test(1)
aTime=1634649372.72013,aTh=0.640625,aPr=0.640625
bTime=1634649373.723695,bTh=0.640625,bPr=0.640625
>>> test(1)

时区概念

接下来介绍几个与时间处理密切相关的核心概念。

GMT:即格林威治标准时间(Greenwich Mean Time)。

UTC:世界协调时间(Universal Time Coordinated),其精度高于格林威治标准时间。

DST:D代表Daylight,指代夏令时(Daylight Saving Time)。

CST:指美国、澳大利亚、中国、古巴等国家采用的标准时间(Central Standard Time)。

掌握上述时区概念后,即可理解time模块中定义的以下常量含义。

常量 altzone daylight tzname timezone
时区偏移 如未定义非DST时区,则为0 时区名称 本地时区偏移

struct_time

为了更规范地表示时间数据,time模块中封装了struct_time类,该类的成员变量包括以下内容。

索引 属性 值 含义
0 tm_year 正整数 年
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 是否为DST
- tm_zone 时区名称的缩写
- tm_gmtoff 以秒为单位的UTC以东偏离

在理解struct_time这一数据结构后,即可顺利阅读并应用以下相关函数。

单参函数
gmtime(secs) 将时间戳转化为UTC时间[struct_time格式]
localtime(secs) 将戳转化为本地时间[struct_time格式]
ctime(secs) 将时间戳转化为UTC时间字符串
asctime(secs) 将时间结构体转化为本地时间字符串
mktime localtime的反函数,将struct_time转为秒数

time.strftime(format[, t])

可以将struct_time对象通过特定的格式转换符进行格式化输出,其支持的转换格式如下表所示。

名称 含意 名称 含意
%a 星期的缩写 %A 星期的名称
%b 月份缩写 %B 月份名称
%c 适当的日期和时间表示
%d 月中日,范围[01,31] %j 年中日,范围[001,366]
%H 小时,范围[00,23] %I 小时,范围[01,12]
%M 分钟,范围[00,59] %S 秒,范围[00,61]
%p AM 或 PM
%m 月份,范围[01,12]
%U 年中周数,范围[00,53]
周日作为第一天
%W 同左,周一作为第一天
%w 周中日,范围[0(星期日),6]
%x 适当的日期表示 %X 适当的时间表示
%y 无世纪年份,范围[00,99] %Y 带世纪的年份
%z 时区偏移
%Z 时区名称
%% 字面的 ‘%' 字符。

strptime()是上述函数的反向操作,用于将格式化的时间字符串解析回时间元组。

例如,执行以下代码:

>>> t = time.strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
>>> t
'Tue, 19 Oct 2021 13:46:37 +0000'
>>> T = time.strptime(t,"%a, %d %b %Y %H:%M:%S +0000")
>>> T
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=19, tm_hour=13, tm_min=46, tm_sec=37, tm_wday=1, tm_yday=292, tm_isdst=-1)

以上就是表格梳理解析python内置时间模块看完就懂的详细内容,更多关于python内置时间模块的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。