ZetCode

Python time

最后修改于 2024 年 1 月 29 日

Python time 教程展示了如何使用标准的 time 模块在 Python 中处理时间。

Python time 模块

time 模块是一个标准的 Python 模块,包含时间访问和转换函数。请注意,此模块存在限制;例如,这些函数可能无法处理纪元之前或未来的日期和时间。

其他与时间相关的功能可以在标准的 datetimecalendar 模块,或第三方 arrow 模块中找到。

Python 时间结构

包括 time.gmtimetime.localtimetime.asctime 在内的几个函数都使用 time.struct_time 对象。

time.struct_time(tm_year=2021, tm_mon=6, tm_mday=27, tm_hour=14, tm_min=12,
     tm_sec=20, tm_wday=6, tm_yday=178, tm_isdst=1)

这是一个时间结构的示例。

索引 属性
0 tm_year 0000, ...., 2021, ..., 9999
1 tm_mon 1, 2, ..., 12
2 tm_mday 1, 2, ..., 31
3 tm_hour 0, 1, ..., 23
4 tm_min 0, 1, ..., 59
5 tm_sec 0, 1, ..., 61
6 tm_wday 0, 1, ..., 6;星期一为 0
7 tm_yday 1, 2, ..., 366
8 tm_isdst 0, 1 或 -1

time.struct_time 对象的值可以通过索引和属性访问。我们可以使用 time.asctime 函数将 time.struct_time 转换为标准的、人类可读的字符串格式。

Python time 纪元

纪元是选择为特定时代原点的某个时间点。Unix 纪元是 1970 年 1 月 1 日 00:00:00 UTC(或 ISO 8601 的 1970-01-01T00:00:00Z)。

epoch.py
#!/usr/bin/python

import time

e = time.gmtime(0)

print(e)
print(e.tm_year, e.tm_mon, e.tm_mday)

该示例打印平台的纪元

e = time.gmtime(0)

要获取纪元,我们将 0 传递给 time.gmtime 函数。

$ ./epoch.py
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0,
     tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
1970 1 1

Python time.time

time.time 函数返回自纪元以来的秒数,以浮点数形式表示。

time_fun.py
#!/usr/bin/python

import time

t = time.time()

print(t)

该示例返回自纪元以来的秒数。

$ date +%s
1624795343
$ ./time_fun.py
1624795347.1246026

Python time.localtime

time.localtime 函数将以自纪元以来秒数表示的时间转换为本地时间结构。

loc_time.py
#!/usr/bin/python

import time

secs = time.time()

loc_time = time.localtime(secs)

print(f'local time: {loc_time}')

print(loc_time.tm_year)
print(loc_time.tm_mon)
print(loc_time.tm_mday)

print('-------------------------')

print(loc_time[0])
print(loc_time[1])
print(loc_time[2])

我们使用 time.time 函数获取经过的秒数,并将其传递给 time.localtime 函数。我们得到

$ ./loc_time.py 
local time: time.struct_time(tm_year=2021, tm_mon=6, tm_mday=27, tm_hour=14, 
     tm_min=20, tm_sec=15, tm_wday=6, tm_yday=178, tm_isdst=1)
2021
6
27
-------------------------
2021
6
27

Python time.ctime

time.ctime 函数将以自纪元以来秒数表示的时间转换为特定的字符串格式,表示本地时间。

loc_time2.py
#!/usr/bin/python

import time
secs = time.time()

loc_time = time.ctime(secs)

print(f'local time: {loc_time}')

该示例使用 time.ctime 函数将以自纪元以来秒数表示的时间转换为人类可读的时间格式。

$ ./loc_time2.py 
local time: Sun Jun 27 14:46:18 2021

Python time.gmtime

time.gmtime 将以自纪元以来秒数表示的时间转换为 UTC 时间结构。

有一个实际需求是全球统一时间。全球统一时间有助于避免时区和夏令时带来的混淆。UTC(协调世界时)被选作主要的时间标准。UTC 用于航空、天气预报、飞行计划、空中交通管制许可和地图。与本地时间不同,UTC 不会因季节变化而改变。

utc_time.py
#!/usr/bin/python

import time

utc = time.gmtime()
print(utc)

print('--------------------')

print(utc.tm_year)
print(utc.tm_mon)
print(utc.tm_mday)
print(utc.tm_hour)

该示例打印协调世界时。

$ ./utc_time.py 
time.struct_time(tm_year=2021, tm_mon=6, tm_mday=27, tm_hour=12, tm_min=55, 
     tm_sec=31, tm_wday=6, tm_yday=178, tm_isdst=0)
--------------------
2021
6
27
12

Python time.asctime

time.asctime 函数将 time.struct_time 转换为标准的、人类可读的字符串格式。

asc_time.py
#!/usr/bin/python

import time

loc = time.localtime()
utc = time.gmtime()

print(time.asctime(loc))
print(time.asctime(utc))

借助 time.asctime,我们打印本地时间和 UTC 时间。

$ ./asc_time.py 
Sun Jun 27 15:06:15 2021
Sun Jun 27 13:06:15 2021

Python time.strptime

time.strptime 函数根据指定的格式解析表示时间的字符串。返回值是时间结构。

parse_time.py
#!/usr/bin/python

import time

v1 = '2021-06-25'
v2 = '25/11/2020'

d1 = time.strptime(v1, '%Y-%m-%d')
print(time.asctime(d1))

d2 = time.strptime(v2, '%d/%m/%Y')
print(time.asctime(d2))

该示例日期以两种不同的格式表示。

$ ./parse_time.py 
Fri Jun 25 00:00:00 2021
Wed Nov 25 00:00:00 2020

Python time.strftime

time.strftime 函数根据格式参数将表示时间的 time 结构转换为字符串。

format_time.py
#!/usr/bin/python

import time

loc = time.localtime()

print(time.strftime('%Y-%m-%d', loc))
print(time.strftime('%c', loc))
print(time.strftime('%A', loc))
print(time.strftime('%B', loc))
print(time.strftime("%H:%M:%S", loc))

该示例使用 time.localtime 获取以 time 结构表示的本地时间。然后,它将返回值格式化为不同的时间格式。

$ ./format_time.py 
2021-06-27
Sun Jun 27 15:17:37 2021
Sunday
June
15:17:37

来源

Python time — 时间访问和转换

在本文中,我们使用了 Python 的 time 模块。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出所有 Python 教程