最近开发遇到需要处理各种日期与时间,现有的各种资料都比较零碎,不成体系,索性结合官方手册和典型示例整理一个比较全的资料。
Python与日期时间相关的两个库datetime、dateutil功能很分丰富,我们按具体用例场景梳理下:
一、datetime库简介
(1)datetime库下有6个类,用的最多的是datetime、time、date、timedelta四个类,另外的tzinfo类、timezone类(python3.2版本后才有timezone类)是与时区相关,应用中涉及到不同时区时间处理的才需要使用。
(2)datetime库与datetime库的datetime类在写代码时容易产生混淆,其实这跟我们import时的命名空间有关,为了方便我们通常是这样来引用:
from datetime import datetime,date,time,timedelta
或者
from datetime import *
那我们输入datetime、date时其实已经是指相关类了
如果是
import datetime
那datetime.datetime是指datetime库的datetime类,datetime.date是指datetime库的date类
这样import的好处是命名空间不会乱。
本文例子用
from datetime import *
(3) datetime库与time库是两个python库, datetime库的time类与python的time库有时候也容易混淆,注意引用时的命名空间,例如我们可以:
from time import time as t_time
from datetime import time as dt_time
datetime库与time库确实存在一些数据类型和方法功能的重叠,但通常涉及日期时间的应用操作选择datetime库就够了,
程序中要用到计时的场景选择time库,time库的time.sleep()方法广泛用于各种计时场景;
二、datetime库date类常用例子
1、获取当前日期
date1 = date.today()
2、生成一个指定日期的date对象
(1) 生成指定日期date对象的3个参数分别为年、月、日,必须全部填写,否则抛出异常:
date1 = date(2023,11,16)
(2)生成时要注意各时间单位有效性,否则要抛出异常,大小月、润年月也要注意
例如:date(2023,2,29)也会抛出异常
3、获取date对象的各时间单位的数值(返回值为int型)
year = date1.year
month = date1.month
day = date1.day
4、修改date对象的各时间单位的数值replace( )
date1 = date(2023,11,16)
date1.replace(year=2022,month =1,day = 22)
# year,month,day可以单独和组合修改
5、求date对象m天是周几 weekday( ) /isoweekday( )
返回值为int型
(1)weekday()
weekday = date1.weekday()
返回值为0-6,周一Monday返回0周天Sunday返回6,
(2)isoweekday ()
weekday = date1.isoweekday ()
返回值为1-7,周一Monday返回1周天Sunday返回7
6、求date对象是一年中第几周和周几 isocalendar( )
返回值为int类型组成的tuple(元组)
calendar = date1.isocalendar()
#返回元组(2023, 46, 4),既表示2023年第46周星期4
year = calendar[0]
week = calendar[1]
days = calendar[2]
7、用某年第几周和周几生成date对象fromisocalendar ( )
Mydate= date.fromisocalendar (2023, 46, 4)
就是isocalendar( )反着用
8、date对象转换为字符串
共有三种方法,假设date对象
Mydate= date(2023, 11, 16)
(1)str类型转换
Mydate_string1 = str(Mydate) #转化为’2023-11-16’
(2) date类的isoformat()
Mydate_string2 = Mydate.isoformat()
#转化为ISO标准的日期字符串’2023-11-16’,跟str(Mydate)一样
(3) date类的strftime()
Mydate_string3 = Mydate.strftime('%Y/%m/%d')
# strftime可自定义格式转换,例子转换结果为’2023/11/16’
9、用字符串生成一个指定的date对象
字符串转为date对象有几种方法,需要先掌握datetime类,才能完全理解所有方法;
详见系列文章:《Python日期时间datetime库与dateutil库典型示例与详解(2)--datetime库datetime类常用例子》