大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
在Python的开发过程中,我们经常要处理时间类型的数据,Python内置了 time
, datetime
等标准库,帮助我们对时间型进行处理,在本节内容中,我们将围绕这两个标准库,详细展开介绍常用方法。
在Python中,time
模块主要用于将时间戳转换为具体的日期时间,但time
模块表示日期时间的对象结构简单,不适合进行复杂的操作和表示。
time
模块中只有time.struct_time
一个类:
struct_time
是一个转换秒数得到的结构化的时间对象,可以通过下标或属性名称获取对象的年月日时分秒等属性。调用 gmtime()
,localtime()
,strptime()
等方法可得到 struct_time
实例。
>>> st = time.localtime()
>>> st
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=27, tm_hour=19, tm_min=27, tm_sec=31, tm_wday=2, tm_yday=300, tm_isdst=0)
>>> st.tm_mon
10
>>> st[1]
10
# 在struct_time和字符串之间进行转换
>>> time.strftime('%H:%M:%S')
'19:10:37'
>>> time.strptime("30 Nov 00", "%d %b %y")
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
import time
# 格式化成2021-10-27 19:56:36形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成Sat Mar 28 22:24:24 2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
# 将格式字符串转换为时间戳
a = "Wed Oct 27 19:56:36 2021"
print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))
datetime
模块支持日期和时间的运算,它提供了一些用于操作日期和时间的类。该模块的绝大部分功能都围绕着以下 4 个类(以及另外两个关于时区的类)的方法和属性来实现。
date
类及用法date
类表示日期类型。
支持的操作符:
date
对象进行 ==
,≤
,<
,≥
,>
等比较操作。timedelta
对象进行加减操作,结果依然为 date
对象。date
对象进行相减操作,得到 timedelta
对象。代码示例:
# 传入日期对应的年月日参数,实例化date类
>>> from datetime import date
>>> date(2021, 10, 29)
datetime.date(2021, 10, 29)
# 可以通过时间戳获得时间
>>> date.fromtimestamp(time.time())
datetime.date(2021, 10, 29)
>>> d2 = date(2021, 10, 29)
>>> d1 = date(2021, 10, 27)
>>> d2 > d1
True
>>> d2 - d1
datetime.timedelta(days=2)
time
类及用法time
类表示时间(时分秒)类型。
支持的操作符
time
对象进行 ==
,≤
,<
,≥
,>
等比较操作。代码示例
>>> from datetime import time
>>> t = time.fromisoformat('19:32:10')
>>> t.strftime('%Hh %Mm %Ss')
'19h 32m 10s'
>>> t = time(hour=19, minute=27, second=55)
>>> t.isoformat()
'19:27:55'
datetime
类及用法datetime
类表示包含日期时分的时间类型,可以视作 date
和 time
实例的组合体,因此同时具备了两种对象的大部分方法和属性。
支持的操作符
datetime
支持与 date
进行相等比较,但结果一定为 False
,除此之外只支持与另一 datetime
对象执行 ==
,≤
,<
,≥
,>
等比较操作。timedelta
相加,结果为 datetime
;支持与 timedelta
对象进行加减,结果依然为 datetime
对象,与另一 datetime
对象进行相减,得到 timedelta
对象。代码示例
>>> from datetime import datetime
>>> datetime(year=2021, month=10, day=29)
datetime.datetime(2021, 10, 29, 0, 0)
>>> datetime.now()
datetime.datetime(2021, 10, 29, 14, 51, 18, 731235)
>>> datetime.fromisoformat('2021-10-29 16:09:32')
datetime.datetime(2021, 10, 29, 16, 9, 32)
>>> dt = datetime.now()
>>> dt.timestamp()
1635317544.682565
>>> dt.date()
datetime.date(2021, 10, 29)
timedelta
timedelta
类对象表示两个 datetime
对象之间的差异。
支持的操作符
只支持与另一 timedelta
进行比较,进行 ==
,≤
,<
,≥
,>
等比较操作。
timedelta
对象支持支持加减操作,datetime
与 timedelta
相加或相减仍然返回 datetime
。
timedelta
还支持乘除模除等操作符。
支持哈希。
timedelta
是有符号的,支持 abs()
函数,可返回两个 datetime
之间的绝对间隔。
代码示例
>>> from datetime import timedelta
>>> timedelta(days=2)
datetime.timedelta(days=2)
>>> dt1 = datetime.now()
>>> dt2 = datetime.now()
>>> dt2 -dt1
datetime.timedelta(seconds=4, microseconds=476390)
>>> d = timedelta(minutes=3, seconds=35)
>>> d.total_seconds()
215.0
本教程系列的代码可以在ShowMeAI对应的github中下载,可本地python环境运行,能科学上网的宝宝也可以直接借助google colab一键运行与交互操作学习哦!
本教程系列涉及的Python速查表可以在以下地址下载获取: