datetime模块
之前整理了Python最最基本的关于时间的time模块,但是,要搞清楚128天前是几月几号或现在距离2023年1月20日还有几天等这类问题,用time模块还是比较繁琐的。datetime模块能以更方便的格式显示日期或对日期进行运算。
概述
datetime模块定义了5个关于日期时间的类,
-
datetime.datetime:表示日期时间的类 -
datetime.timedelta:表示时间间隔的类 -
datetime.date:表示日期的类 -
datetime.time:表示时间的类 -
datetime.tzinfo:时区相关的类
大部分的常见操作都是使用datetime和timedelta类,下面是这两个类的常见操作小结。
一、datetime类
datetime.datetime类对应的实例对象代表某一个时刻,这个对象包含年、月、日、时、分、秒、微秒等属性。也就是说一旦获取了特定时刻的datetime对象,获取年、月、日、时、分、秒、微秒就轻而易举了!
1.创建datetime对象
构造datetime.datetime对象便是创建一个时刻,常见的创建方法主要有如下三种:
(1)创建当前时刻的datetime对象
from datetime import datetime
dt = datetime.now() # 获取当前的日期和时间
dtoutput:
datetime.datetime(2022, 8, 7, 17, 5, 5, 313337)创建了datetime对象后,顺便提一下用法,可以通过以下属性单独获取年月日等信息,十分方便。
dt.year
dt.month
dt.day
dt.hour
dt.minute
dt.second(2)手动创建某个时刻的datetime对象
from datetime import datetime
nationalDay = datetime(2023,10,1,0,0,0)(3)时间戳创建datetime对象
from datetime import datetime
import time
dt = datetime.fromtimestamp(time.time())(4)字符串中解析datetime对象
见下文:
三、datetime与字符串\2.字符串转datetime
2.时间先后的比较
datetime类型的对象是支持比较的,较后的时刻比较前的时刻更“大”。
from datetime import datetime
laborDay = datetime(2023,5,1,0,0,0)
nationalDay = datetime(2023,10,1,0,0,0)
# 2023年的五一劳动节要早于国庆节,返回 True
laborDay < nationalDayoutput:
True实例应用:暂停至特定日期
from datetime import datetime
import time
nationalDay = datetime(2022,10,1,0,0,0)
while datetime.now() < nationalDay:
time.sleep()
print("国庆节快乐!")二、timedelta类
datetime.timedelta类对于的实例表示时间间隔。比如我们要像计算再过123天之后是几月几号,这里的123天便是一个时间间隔。具体实现如下
实例应用
import datetime
# 构造一个123天的时间间隔
deltaDays = datetime.timedelta(days = 123)
# 获取今天的时间(注:文本代码运行日期:2022年8月8日)
today = datetime.datetime.now()
# 在今天的时刻 + 时间间隔123天
today + deltaDaysoutput:
datetime.datetime(2022, 12, 9, 7, 7, 19, 120988)从上面的列子中,可以体会到datetime模块在日期计算中的强大功能,要想实现日期计算,需要创建起始时间的datetime对象(上文中已介绍)以及时间间隔对象timedelta对象。
1.创建timedelta对象
datetime.timedelta类的构造方法timedelta()函数接收关键字参数weeks、days、hours、minutes、seconds、milliseconds和microseconds。注意,时间间隔的创建没有月months和年years,主要是因为年月是可变时间,依赖于特定的月份和年份。
# 构造一个12天9小时10分钟6秒的时间长度对象
delta = datetime.timedelta(days = 12 ,hours = 9,minutes = 10,seconds = 6)2.timedelta对象的常用属性
timedelta对象的对应时长可以以天、秒、微秒三种方式来获取。对于的属性分别是days、seconds、microseconds。
delta.days , delta.seconds , delta.microseconds
# output: (12, 33006, 0)也可以调用total_seconds()方法来获取以秒为单位的总时长。
delta.total_seconds()
# output: 1069806.0即:
delta.total_seconds() == delta.days + delta.seconds + delta.microseconds
# 返回 True三、datetime与字符串
datetime类型的数据在日期时间计算上十分的方便,但在人阅读上不是特别友好,转成便于阅读的字符串格式也是常见的操作。
1.datetime转字符串
利用datetime类的实例方法strftime()可以轻松转为格式化的字符串,其中f便是format,格式化的意思。具体使用的适合需要传入定制的格式化字符串。
import datetime
nowdt = datetime.datetime.now()
nowdt.strftime('%Y/%m/%d %H:%M:%S')output:
'2022/08/08 09:38:44'定制格式化字符串的指令含义:
指令 | 含义说明 | 列 |
| 简写周几 | Sun, Mon, …, Sat |
| 完整周几 | Sunday, Monday, …, Saturday |
| 一周中的第几天 | 0, 1, …, 6 |
| 一月中的第几天 | 01, 02, …, 31 |
| 简写月份 | Jan, Feb, …, Dec |
| 完整月份 | January, February, …, December |
| 月份(数字) | 01, 02, …, 12 |
| 不带世纪的年份(1970至2069) | 00, 01, …, 99 |
| 带世纪的年份(如2022) | 0001, 0002, …, 2021, 2022, …, 9998, 9999 |
| 小时(24小时制) | 00, 01, …, 23 |
| 小时(12小时制) | 01, 02, …, 12 |
| AM 或 PM | AM, PM |
| 分(数字) | 00, 01, …, 59 |
| 秒(数字) | 00, 01, …, 59 |
| 微妙(6位数字). | 000000, 000001, …, 999999 |
|
| % |
可以尝试其他不同的字符串输出
nowdt.strftime('%B of %y')
# output : 'August of 22'
nowdt.strftime('%I:%M %p')
# output : '09:38 AM'2.字符串转datetime
利用datetime类的静态方法strptime()可以轻松转为格式化的字符串,其中p便是parse,解析的意思,即从对于字符串格式中解析出日期时间数据。
datetime.datetime.strptime('2022年8月8日','%Y年%m月%d日')
# output : datetime.datetime(2022, 8, 8, 0, 0)
datetime.datetime.strptime('2014年6月30日18点34分','%Y年%m月%d日%H点%M分')
# output : datetime.datetime(2014, 6, 30, 18, 34)结语
time模块和datetime模块都是Python中关于时间的内置模块,time模块更加基础、底层,datetime模块则更易用,充分体现出了Python的简洁优雅!当然Python还有其他更加高效的时间相关第三方模块,后续有机会再整理。
















