前言
在学习Python的过程中看不懂
nowtime=(time.asctime(time.localtime(time.time())))
于是查了资料加上总结精华而成,话不多说,翠花,上八股!
首先:time模块用来处理日期和时间,转换日期格式是一个常见的功能
术语及惯例解释
纪元秒数是指自 epoch (纪元)时间点(1970-01-01, 00:00:00)以来经过的总秒数即时间戳
UTC是协调世界时(Coordinated Universal Time)的缩写。它以前也被称为格林威治标准时间(GMT)
DST是夏令时(Daylight Saving Time)的缩写,在一年的某一段时间中将当地时间调整(通常)一小时。DST的规则非常神奇(由当地法律确定),并且每年的起止时间都不同。C语言库中有一个表格,记录了各地的夏令时规则(实际上,为了灵活性,C语言库通常是从某个系统文件中读取这张表)。从这个角度而言,这张表是夏令时规则的唯一权威真理。
时间元组struct_time由 gmtime(),localtime() 和 strptime() 返回,并被 asctime(), mktime() 和 strftime() 接收,是一个 9 个整数的序列。gmtime(), localtime() 和 strptime() 的返回值还提供各个字段的属性名称。
注释(2):范围真的是 0 到 61 ;值 60 在表示 leap seconds 的时间戳中有效,并且由于历史原因支持值 61 。
-
time.time() 以浮点型返回当前时间的时间戳,
1702309672.798722
以下函数返回时间元组
-
time.gmtime([secs]) 接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组struct_time。注:t.tm_isdst始终为0
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=11, tm_hour=15, tm_min=53, tm_sec=19, tm_wday=0, tm_yday=345, tm_isdst=0)
-
time.localtime([secs]) 接收时间戳(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组struct_time。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 1 。
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=12, tm_hour=0, tm_min=3, tm_sec=11, tm_wday=1, tm_yday=346, tm_isdst=0)
-
localtime() 可能会引发 OverflowError ,如果时间戳超出平台 C localtime() 或 gmtime() 函数支持的范围,并会在 localtime() 或 gmtime() 失败时引发 OSError 。这通常被限制在1970至2038年之间。
-
time.strptime(string[, format]) 根据需求的格式返回表示时间的字符串
print(time.strptime('2023-12-12', "%Y-%m-%d"))
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=346, tm_isdst=-1)
以下函数接受时间元组
-
time.asctime([t]) 接受时间元组struct_time转换为以下形式的字符串: 'Sun Jun 20 23:21:05 1993'。
日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun 9 04:26:40 1993'。
如果未提供 t,则会使用 localtime() 所返回的当前时间。 asctime() 不会使用区域设置信息。
print(time.asctime(time.localtime(time.time())))
Tue Dec 12 00:39:13 2023
-
time.mktime(t) 接受时间元组struct_time转换为 local 当地时间的时间戳以便与 time() 兼容即localtime()的反函数
print(time.mktime(time.localtime()))
1702313227.0
-
time.strftime(format[, t]) 接受元组并转换为format 参数指定的字符串。如果未提供 t ,则使用由 localtime() 返回的当前时间
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
2023-12-12 23:56:32
以下指令可以嵌入 format 字符串中:
注释:
-
当与
strptime()
函数一起使用时,如果使用%I
指令来解析小时,%p
指令只影响输出小时字段。 -
范围真的是
0
到61
;值60
在表示 leap seconds 的时间戳中有效,并且由于历史原因支持值61
。 -
当与
strptime()
函数一起使用时,%U
和%W
仅用于指定星期几和年份的计算。
其他时间函数
-
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))。 ctime() 不会使用区域设置信息。
print(time.ctime())
Tue Dec 12 09:10:48 2023
- time.sleep(secs) 调用方线程暂停执行给定的秒数。该参数可以为浮点数以指定一个更精确的休眠时间。
总结
不忘初心
还记得咱们开头的问题吗?
现在就搞明白啦:localtime()接收时间戳返回当地时间下的时间元组struct_time,然后传给asctime()生成了一个类似于
这样格式的Tue Dec 12 00:39:13 2023
All right,时间啊,时间都去哪了?!劝君莫惜金缕衣,劝君惜取少年时~