1.time模块
1.1 time模块简介
在Python中,通常有这几种方式来表示时间:
- 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型的时间戳。
- 格式化的时间字符串(Format String)
- 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
如下所示:
import time #-------当前时间为准的三种形式的时间 print(time.time()) # 时间戳:1631616128.24815 print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2021-09-14 18:42:08' print(time.localtime()) #本地时区的struct_time对象:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=14, tm_hour=18, tm_min=42, tm_sec=8, tm_wday=1, tm_yday=257, tm_isdst=0) print(time.gmtime()) #UTC时区的struct_time对象:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=14, tm_hour=10, tm_min=42, tm_sec=8, tm_wday=1, tm_yday=257, tm_isdst=0)
1.2 time模块常用函数
import time #1.time.time() → float #返回时间戳。以浮点数表示的从 epoch 开始的秒数的时间值。 print(time.time())#输出:1631689353.428093 #2.time.gmtime([secs]) #将以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time ,其中 dst 标志始终为零。 # 如果未提供 secs 或为 None ,则使用 time() 所返回的当前时间。 一秒以内的小数将被忽略。 print(time.gmtime())#输出time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=6, tm_min=40, tm_sec=59, tm_wday=2, tm_yday=258, tm_isdst=0) print(time.gmtime(1631689353.428093))#将时间戳转换为struct_time对象 #3.time.localtime([secs]) #与 gmtime() 相似但转换为当地时间。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 1 。 print(time.localtime())#输出:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=14, tm_min=42, tm_sec=8, tm_wday=2, tm_yday=258, tm_isdst=0) print(time.localtime(1631689353.428093))#将时间戳转换为struct_time对象 #4.time.asctime([t]) # 转换由 gmtime() 或 localtime() 所返回的表示时间的元组或 struct_time 为以下形式的字符串: 'Sun Jun 20 23:21:05 1993'。 #日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun 9 04:26:40 1993'。 #如果未提供 t,则会使用 localtime() 所返回的当前时间。 print(time.asctime())#输出:Wed Sep 15 14:32:48 2021 #5.time.ctime([secs]) #转换以距离初始纪元的秒数表示的时间为以下形式的字符串: 'Sun Jun 20 23:21:05 1993' 代表本地时间。 # 日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun 9 04:26:40 1993'。 #如果 secs 未提供或为 None,则使用 time() 所返回的当前时间。 ctime(secs) 等价于 asctime(localtime(secs))。 print(time.ctime())#输出:Wed Sep 15 14:38:50 2021 #6.time.mktime(t) #这是 localtime() 的反函数。它的参数是 struct_time 或者完整的 9 元组(因为需要 dst 标志;如果它是未知的则使用 -1 作为dst标志),它表示 local 的时间,而不是 UTC 。 # 它返回一个浮点数,以便与 time() 兼容。如果输入值不能表示为有效时间,则 OverflowError 或 ValueError 将被引发(这取决于Python或底层C库是否捕获到无效值)。它可以生成时间的最早日期取决于平台。 print(time.mktime(time.localtime()))#将struct_time表示的时间转换为时间戳表示的时间:1631688229.0 #7.time.sleep(secs) #调用该方法的线程将被暂停执行 secs 秒。参数可以是浮点数,以表示更为精确的睡眠时长。 #8.time.strftime(format[, t]) #转换一个元组或 struct_time 表示的由 gmtime() 或 localtime() 返回的时间到由 format 参数指定的字符串。如果未提供 t ,则使用由 localtime() 返回的当前时间。 # format 必须是一个字符串。如果 t 中的任何字段超出允许范围,则引发 ValueError 。 #以下指令可以嵌入 format 字符串中。它们显示时没有可选的字段宽度和精度规范,并被 strftime() 结果中的指示字符替换: #指令 意义 注释 #%a 本地化的缩写星期中每日的名称。 #%A 本地化的星期中每日的完整名称。 #%b 本地化的月缩写名称。 #%B 本地化的月完整名称。 #%c 本地化的适当日期和时间表示。 #%d 十进制数 [01,31] 表示的月中日。 #%H 十进制数 [00,23] 表示的小时(24小时制)。 #%I 十进制数 [01,12] 表示的小时(12小时制)。 #%j 十进制数 [001,366] 表示的年中日。 #%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 时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。 #%Z 时区名称(如果不存在时区,则不包含字符)。 #%% 字面的 '%' 字符。 #注释: #1.当与strptime() 函数一起使用时,如果使用 %I 指令来解析小时, %p 指令只影响输出小时字段。 #2.范围真的是 0 到 61 ;值 60 在表示 leap seconds 的时间戳中有效,并且由于历史原因支持值 61 。 #3.当与 strptime() 函数一起使用时, %U 和 %W 仅用于指定星期几和年份的计算。 print(time.strftime('%Y-%m-%d %X'))#2021-09-15 15:15:14 print(time.strftime('%Y-%m-%d %w %H:%M:%S',time.localtime()))#2021-09-15 3 15:17:22 #9.time.strptime(string[, format]) #根据格式解析表示时间的字符串。 返回值为一个被 gmtime() 或 localtime() 返回的 struct_time 。 #format 参数使用与 strftime() 相同的指令。 它默认为匹配 ctime() 所返回的格式 "%a %b %d %H:%M:%S %Y"` 。 # 如果 string 不能根据 format 来解析,或者解析后它有多余的数据,则会引发 ValueError。 # 当无法推断出更准确的值时,用于填充任何缺失数据的默认值是 (1900, 1, 1, 0, 0, 0, 0, 1, -1) 。 string 和 format 都必须为字符串。 print(time.strptime('2021-09-15 3 15:15:14','%Y-%m-%d %w %H:%M:%S'))#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=15, tm_min=15, tm_sec=14, tm_wday=2, tm_yday=258, tm_isdst=-1)