【Python基础】datetime模块

datetime模块

之前整理了Python最最基本的关于时间的time模块,但是,要搞清楚128天前是几月几号或现在距离2023年1月20日还有几天等这类问题,用time模块还是比较繁琐的。datetime模块能以更方便的格式显示日期或对日期进行运算。

概述

datetime模块定义了5个关于日期时间的类,

  • datetime.datetime:表示日期时间的类
  • datetime.timedelta:表示时间间隔的类
  • datetime.date:表示日期的类
  • datetime.time:表示时间的类
  • datetime.tzinfo:时区相关的类

大部分的常见操作都是使用datetimetimedelta类,下面是这两个类的常见操作小结。

一、datetime

datetime.datetime类对应的实例对象代表某一个时刻,这个对象包含年、月、日、时、分、秒、微秒等属性。也就是说一旦获取了特定时刻的datetime对象,获取年、月、日、时、分、秒、微秒就轻而易举了!

1.创建datetime对象

构造datetime.datetime对象便是创建一个时刻,常见的创建方法主要有如下三种:

(1)创建当前时刻的datetime对象

from datetime import datetime

dt = datetime.now()   # 获取当前的日期和时间
dt

output:

 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 < nationalDay

output:

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 + deltaDays

output:

datetime.datetime(2022, 12, 9, 7, 7, 19, 120988)

从上面的列子中,可以体会到datetime模块在日期计算中的强大功能,要想实现日期计算,需要创建起始时间的datetime对象(上文中已介绍)以及时间间隔对象timedelta对象。

1.创建timedelta对象

datetime.timedelta类的构造方法timedelta()函数接收关键字参数weeksdayshoursminutessecondsmillisecondsmicroseconds。注意,时间间隔的创建没有月months和年years,主要是因为年月是可变时间,依赖于特定的月份和年份。

# 构造一个12天9小时10分钟6秒的时间长度对象
delta = datetime.timedelta(days = 12 ,hours = 9,minutes = 10,seconds = 6)

2.timedelta对象的常用属性

timedelta对象的对应时长可以以天、秒、微秒三种方式来获取。对于的属性分别是dayssecondsmicroseconds

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'

定制格式化字符串的指令含义:

指令 含义说明
%a 简写周几 Sun, Mon, …, Sat
%A 完整周几 Sunday, Monday, …, Saturday
%w 一周中的第几天 0, 1, …, 6
%d 一月中的第几天 01, 02, …, 31
%b 简写月份 Jan, Feb, …, Dec
%B 完整月份 January, February, …, December
%m 月份(数字) 01, 02, …, 12
%y 不带世纪的年份(1970至2069) 00, 01, …, 99
%Y 带世纪的年份(如2022) 0001, 0002, …, 2021, 2022, …, 9998, 9999
%H 小时(24小时制) 00, 01, …, 23
%I 小时(12小时制) 01, 02, …, 12
%p AM 或 PM AM, PM
%M 分(数字) 00, 01, …, 59
%S 秒(数字) 00, 01, …, 59
%f 微妙(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还有其他更加高效的时间相关第三方模块,后续有机会再整理。

你可能感兴趣的:(python基础,python,自动化办公,python,开发语言)