模块
Python处理时间的常用模块为:
time
时间的访问和转换datetime
处理日期和时间的类calendar
通用日历相关函数zoneinfo
代表IANA时区数据库的具体时区
在Python中,我们日常常用为前两个模块(Time、Datetime)。
以下介绍中的函数方法只针对日常所用方法来表达,若看详细复杂表达方法可看参考链接。
time – 时间的访问和转换
尽管所有平台皆可使用此模块,但模块内的函数并非所有平台都可用。此模块中定义的大多数函数的实现都是调用其所在平台的C语言库的同名函数。因为这些函数的语义可能因平台而异,所以使用时最好查阅对应平台的相关文档。
时间戳单位最适于做日期运算。通常日期限制在1970至2038年之间。
术语表
术语 | 解释 |
---|---|
epoch |
时间开始的点,取决于平台 |
UTC |
协调世界时(Coordinated Universal Time),格林威治标准时间(GMT) |
DST |
夏令时(Daylight Saving Time) |
指令 | 含意 |
---|---|
%a |
本地化的缩写星期中每日的名称。 |
%A |
本地化的星期中每日的完整名称。 |
%b |
本地化的月缩写名称。 |
%B |
本地化的月完整名称。 |
%c |
本地化的适当日期和时间表示。 |
%d |
十进制数 [01,31] 表示的月中日。 |
%f |
微秒作为一个十进制数,零填充到 6 位。 |
%H |
十进制数 [00,23] 表示的小时(24小时制)。 |
%I |
十进制数 [01,12] 表示的小时(12小时制)。 |
%j |
十进制数 [001,366] 表示的年中日。 |
%m |
十进制数 [01,12] 表示的月。 |
%M |
十进制数 [00,59] 表示的分钟。 |
%p |
本地化的 AM 或 PM 。 |
%S |
十进制数 [00,61] 表示的秒。 |
%U |
十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。 |
%w |
十进制数 [0(星期日),6] 表示的周中日。 |
%W |
十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。 |
%x |
本地化的适当日期表示。 |
%X |
本地化的适当时间表示。 |
%y |
十进制数 [00,99] 表示的没有世纪的年份。 |
%Y |
十进制数表示的带世纪的年份。 |
%z |
时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。 |
%Z |
时区名称(如果不存在时区,则不包含字符)。已弃用。 |
%% |
字面的 '%' 字符。 |
日常时间元组值 struct_time
术语
索引 | 属性 | 值 |
---|---|---|
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以东偏离 |
tm_isdst
可以在夏令时生效时设置为1,而在夏令时不生效时设置为0。 值-1表示这是未知的,并且通常会导致填写正确的状态。
函数
# 引入time模块
import time
timeNowTicks = time.time()
"""
返回以浮点数表示的从 epoch 开始的秒数的时间值。
返回值,形如:
1661305619.851781
"""
time.asctime()
"""
将时间元组 time.struct_time 转换为字符串,当元组不存在时(即没有参数时),启用本地时间。
返回值,形如:
Tue Aug 23 10:22:02 2022
"""
time.gmtime()
"""
以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time,返回值,形如:
time.struct_time(tm_year=2022, tm_mon=8, tm_mday=23, tm_hour=10, tm_min=24, tm_sec=48, tm_wday=1, tm_yday=235, tm_isdst=0)
"""
time.localtime()
"""
与 gmtime() 相似但转换为当地时间,
返回值,形如:
time.struct_time(tm_year=2022, tm_mon=8, tm_mday=23, tm_hour=18, tm_min=30, tm_sec=19, tm_wday=1, tm_yday=235, tm_isdst=0)
"""
time.mktime(t)
"""
将时间元组 struct_time 转换为时间戳,结果精确的秒
返回值,形如:
1661221944.0
"""
time.sleep(secs)
"""
调用该方法的线程将被暂停执行 secs 秒。参数可以是浮点数,以表示更为精确的睡眠时长。
由于系统需要调度其他活动,实际暂停时长也可能比请求的时间长。
"""
time.strftime(format[, t])
"""
转换一个元组或 struct_time 表示的由 gmtime() 或 localtime() 返回的时间到由 format 参数指定的字符串。
"""
time.strptime(string[, format])
"""
根据格式解析表示时间的字符串。 返回值为一个被 gmtime() 或 localtime() 返回的 struct_time 。
"""
time.tzname
"""
两个字符串的元组:第一个是本地非DST时区的名称,第二个是本地DST时区的名称。
日常使用来自 localtime() 结果的 tm_gmtoff 和 tm_zone 来获取时区信息。
"""
常用例子
import time
print(time.time()) # 时间戳
# 1661307904.9684181
print(time.gmtime()) # 格林威治时间/UTC
# time.struct_time(tm_year=2022, tm_mon=8, tm_mday=24, tm_hour=2, tm_min=25, tm_sec=4, tm_wday=2, tm_yday=236, tm_isdst=0)
print(time.localtime()) # 本地时间
print(time.localtime(1661309331.3546288)) # 将时间戳转换为时间元组
# time.struct_time(tm_year=2022, tm_mon=8, tm_mday=24, tm_hour=10, tm_min=25, tm_sec=4, tm_wday=2, tm_yday=236, tm_isdst=0)
print(time.asctime()) # 时间元组转换成字符串时间
print(time.asctime(time.localtime()))
# Wed Aug 24 10:25:04 2022
print(time.mktime(time.localtime())) # 时间元组转换成时间戳
# 1661279104.0
print(time.strftime("%A, %c,%d %B %Y %H:%M:%S +0000, %p", time.localtime()))
# 具体转换形式可看上面术语表,自行选择定义
# Wednesday, Wed Aug 24 10:48:51 2022,24 August 2022 10:48:51 +0000, AM
print(time.strptime('2022-07-24T10:54:00.000Z', "%Y-%m-%dT%H:%M:%S.%fZ"))
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=24, tm_hour=10, tm_min=54, tm_sec=0, tm_wday=6, tm_yday=205, tm_isdst=-1)
print(time.tzname)
# ('中国标准时间', '中国夏令时')
print(time.localtime().tm_gmtoff) # 以秒为单位的UTC以东偏离
# 28800
print(time.localtime().tm_zone) # 时区名称缩写
# 中国标准时间
datetime–处理日期和时间的类
datetime
模块提供用于处理日期和时间的类。
日常我们更关注日期时间的运算,以及解析时间属性用于格式化输出和数据操作。
timedelta类对象
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
"""
可用作数学计算 时间
所有参数都是可选的并且默认为 0。 这些参数可以是整数或者浮点数,也可以是正数或者负数。
返回值只有 days, seconds 和 microseconds 会存储在内部。 参数单位的换算规则如下:
1毫秒会转换成1000微秒。
1分钟会转换成60秒。
1小时会转换成3600秒。
1星期会转换成7天。
"""
date对象
对象代表一个理想化历法中的日期(年、月和日),即当今的格列高利历向前后两个方向无限延伸。
datetime.date.fromtimestamp(time.time())
"""
将时间戳转换为本地日期,形如 YYYY-MM-DD 格式
2022-08-24
"""
datetime.date.today()
"""
返回当前的本地日期。
这等价于 date.fromtimestamp(time.time())
"""
datetime.date.fromisoformat(date_string)
"""
只支持 YYYY-MM-DD 格式。
返回一个对应于以 YYYY-MM-DD 格式给出的 date_string 的 date 对象
"""
datetime.date.isoformat()
"""
datetime.date.today().isoformat()
返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串
与 datetime.date.fromisoformat 互为逆操作
"""
date.strftime(format)
"""
返回一个由显式格式字符串所指明的代表日期的字符串。
"""
datetime对象
datetime
对象是包含来自 date
对象和 time
对象的所有信息的单一对象。
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
"""
year, month 和 day 参数是必须的。 tzinfo 可以是 None 或者是一个 tzinfo 子类的实例。
"""
datetime.datetime.today()
"""
返回表示当前地方时的 datetime 对象
"""
datetime.datetime.utcnow()
"""
返回表示当前 UTC 时间的 date 和 time,
"""
datetime.datetime.fromtimestamp()
"""
返回时间戳对应的本地日期和时间
"""
datetime.datetime.utcfromtimestamp()
"""
返回时间戳对应的UTCdatetime
"""
date
, datetime
和 time
对象都支持 strftime(format)
方法,可用来创建由一个显式格式字符串所控制的表示时间的字符串。
相反地,datetime.strptime()
类会根据表示日期和时间的字符串和相应的格式字符串来创建一个 datetime
对象。
time的转换格式指令同样适用于datetime.strptime()和datetime.strftime(),但除非格式中包含秒以下的部分或时区差值信息,它们在 datetime.strptime
中受支持但会被 time.strptime
所丢弃。
常用例子
import datetime
# 结合上述介绍的datetime的三种类方法进行表达
timeUtc = datetime.datetime.utcnow() # UTC现在时间
# 2022-08-24 06:51:19.013422
timeDelta = datetime.timedelta(seconds=30) # 30秒时间
# 0:00:30
timeDate = timeUtc + timeDelta
# 2022-08-24 06:50:49.013422
timeStr = tiemUtc.strftime("%Y-%m-%dT%H:%M:%S.%fZ") # 将datetime转换为字符串
# 2022-08-24T06:50:49.013422Z
参考链接:
Datetime 基本日期和时间类型
zoneinfo IANA 时区支持
Time 时间的访问和转换
calendar 日历相关函数
Python 日期和时间