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模块常用函数


python标准库time 和datetime_字段python标准库time 和datetime_字段_02


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)

View Code

 1.3 三种时间表示之间的转换方式

 python标准库time 和datetime_十进制数_03

2.datetime模块

2.1 datetime 模块的date对象

date对象代表一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。 属性: year, month, and day。

date对象的常用方法如下:


python标准库time 和datetime_字段python标准库time 和datetime_字段_02


#1. date.today()返回表示当前的本地日期的date对象
today = datetime.date.today()

#2. 自己传参数实例化date对象
d = datetime.date(2021,9,14)

print(today.__dir__())
#['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__',
# '__ge__', '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'fromtimestamp', 'fromordinal', 'today',
# 'ctime', 'strftime', '__format__', 'timetuple', 'isocalendar', 'isoformat', 'isoweekday', 'toordinal', 'weekday',
# 'replace', '__reduce__', 'year', 'month', 'day', '__doc__', 'min', 'max', 'resolution', '__setattr__', '__delattr__',
# '__init__', '__reduce_ex__', '__subclasshook__', '__init_subclass__', '__sizeof__', '__dir__', '__class__']

print(today.day,today.month,today.year)#15 9 2021

#3. date.fromtimestamp(timestamp)返回对应于 POSIX 时间戳的当地时间,例如 time.time() 返回的就是时间戳。
print(today.fromtimestamp(1631611105.0))#2021-09-14

#4. date.timetuple()返回一个 time.struct_time,即 time.localtime() 所返回的类型。
print(today.timetuple())#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=258, tm_isdst=-1)

#5. date.weekday()返回一个整数代表星期几,星期一为0,星期天为6。
print(today.weekday())#2

#6. date.isoweekday()返回一个整数代表星期几,星期一为1,星期天为7。
print(today.isoweekday())#3

#7. date.isocalendar()返回一个由三部分组成的 named tuple 对象: year, week 和 weekday。
print(today.isocalendar())#(2021, 37, 3)

#8. date.isoformat()返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串:
print(today.isoformat())#2021-09-15

#9 date.ctime()返回一个表示日期的字符串:
print(today.ctime())#"Wed Sep 15 00:00:00 2021"

#10 date.strftime(format)#返回一个由显式格式字符串所指明的代表日期的字符串。
print(today.strftime('%Y/%m/%d'))#2021/09/15

View Code

 2.2 datetime 模块的datetime对象

datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。与 date 对象一样,datetime 假定当前的格列高利历向前后两个方向无限延伸;与 time 对象一样,datetime 假定每一天恰好有 3600*24 秒。

 

 

 

>>>待续