1、概述
python3.7.7版本的内置datetime模块主要包含以下内容:
名称 | 解释说明 | 使用频率 |
---|---|---|
datetime.timedelta | datetime模块中的时间跨度类, 可以通过该类进行时间、日期或者时间日期对象的加、减操作 | 频繁,需要掌握 |
datetime.time | datetim模块中的时间类,用于时间对象的处理 | 频繁,需要掌握 |
datetime.date | datetime模块中的日期类,用于日期对象的处理 | 频繁,需要掌握 |
datetime.datetime | datetime模块中的日期时间类,用于日期时间对象的处理 | 频繁,需要掌握 |
datetime.tzinfo | 处理与时区有关的相关信息的抽象类,子类需要对name(), utcoffset() and dst() 方法进行重写 | 偶尔,了解即可 |
datetime.timezone | 处理与时区有关的相关信息的类,是tzinfo类的子类,一般处理时区都采用pytz模块 | 偶尔,了解即可 |
MINYEAR | datetime模块中的静态变量, 最小年份(1) | 了解即可 |
MAXYEAR | datetime模块中的静态变量,最大年份(9999) | 了解即可 |
2、timedelta类
2.1 引用方式
```python
from datetime import timedelta
```
2.2 timedelta类属性和方法
timedelta重写了object类的__new__方法,给类增加了days/seconds/microseconds等类属性
2.3 主要使用场景
2.3.1 场景一:往前或者往后推算日期时间
from datetime import datetime, timedelta
# 创建一个日期时间实例对象
dt = datetime(year=2020,month=12,day=29,hour=12,minute=30,second=0)
print(dt)
# datetime.datetime(2020, 12, 29, 12, 30)
# 创建一个时间间隔对象,以天为默认单位间隔
td = timedelta(days=1)
# 日期时间对象与时间间隔做运算,返回值是一个新的时间日期对象
dt- td
# 返回值
datetime.datetime(2020, 12, 28, 12, 30)
# 日期时间对象与时间间隔做运算,返回值是一个新的时间日期对象
dt + td
# 返回值
datetime.datetime(2020, 12, 30, 12, 30)
# 创建一个时间间隔对象,以分钟为默认单位间隔
td2 = timedelta(minutes=15)
# 日期时间对象与时间间隔做运算,返回值是一个新的时间日期对象
dt - td2
# 返回值
datetime.datetime(2020, 12, 29, 12, 15)
# 日期时间对象与时间间隔做运算,返回值是一个新的时间日期对象
dt + td2
datetime.datetime(2020, 12, 29, 12, 45)
# 创建一个时间间隔对象,以小时为默认单位间隔
td3 = timedelta(hours=2)
# 日期时间对象与时间间隔做运算,返回值是一个新的时间日期对象
dt + td3
# 返回值
datetime.datetime(2020, 12, 29, 14, 30)
# 日期时间对象与时间间隔做运算,返回值是一个新的时间日期对象
dt - td3
# 返回值
datetime.datetime(2020, 12, 29, 10, 30)
2.3.2 场景二:两个时间日期对象间计算返回一个timedelta对象
# 创建一个日期时间对象
dt1 = datetime(2020,12,30,12,30,00)
# 创建一个新的日期时间对象
dt2 = datetime(2019,1,1,0,0,0)
# 算数运算
dt1 - dt2
# 返回值为一个timdelta时间间隔类对象
datetime.timedelta(days=729, seconds=45000)
3、date类
3.1 引用方式
# 第一种方式:
import datetime
# 使用datetime.date(2020,12,25)的方式进行调用
# 第二种方式:
from datetime import date
# 使用date(2020,12,25)的方式进行调用
# 两种方式都可以
3.2 date类属性和类方法、实例方法
先在ipython中看一下有哪些属性和方法,再看源码里面具体的方法介绍
- 1)date类属性表
属性名称 | 属性类型 | 属性作用解释 |
---|---|---|
datetime.date.min | 类属性 | date日期对象所能表示的最小日期 |
datetime.date.max | 类属性 | date日期对象所能表示的最大日期 |
datetime.date.year | 实例属性 | 返回date日期对象中的年份 |
datetime.date.month | 实例属性 | 返回date日期对象中的月份 |
datetime.date.day | 实例属性 | 返回date日期对象中的天数 |
- 2)date类类方法表
类方法名 | 方法类型 | 传参说明 | 方法作用解释 |
---|---|---|---|
datetime.date.today() | 静态方法 | 无 | 返回一个表示当前本地日期的date对象; |
datetime.date.fromisoformat() | 静态方法 | 日期字符串 | 返回一个表示当前本地日期的date对象; |
datetime.date.fromordinal() | 静态方法 | Gregorian日历时间对象 | 将Gregorian日历时间转换为本地日期的date对象; |
datetime.date.fromtimestamp(timestamp) | 静态方法 | timestamp | 根据给定的时间戮对象,返回一个date日期对象; |
- 3)date类实例方法表
实例方法 | 方法类型 | 传参说明 | 方法作用解释 |
---|---|---|---|
datetime.date.replace() | 实例方法 | year,month,day | 生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性; |
datetime.date.timetuple() | 实例方法 | 无,直接使用日期对象调用 | 返回日期对应的本地时间元组; |
datetime.date.toordinal() | 实例方法 | 无,直接使用日期对象调用 | 返回日期对应的Gregorian Calendar日期; |
datetime.date.weekday() | 实例方法 | 无,直接使用日期对象调用 | 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; |
datetime.date.isoweekday() | 实例方法 | 无,直接使用日期对象调用 | 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; |
datetime.date.isocalendar() | 实例方法 | 无,直接使用日期对象调用 | 返回指定日期是该日期是这一年的第几周、周几这三个值; |
datetime.date.isoformat() | 实例方法 | fmt日期格式化字符串 | 返回格式如’YYYY-MM-DD’的字符串; |
datetime.date.ctime() | 实例方法 | 无,直接使用日期对象调用 | 将一个时间戳(默认为当前时间)返回一个格式为"周几 月份-天数 00:00:00 年份"的字符串 |
datetime.date.strftime(fmt_str) | 实例方法 | 自定义的格式化字符串 | 返回一个表示当前本地日期的date对象自定义格式化字符串;字符串格式化字符见下表 |
- 3)date类实例格式化符号含义表
格式化符号名称 | 代表含义 |
---|---|
%x | 日期字符串(如:01/01/20) |
%X | 时间字符串(如:12:30:00) |
%y | 2个数字表示的年份 |
%Y | 4个数字表示的年份 |
%m | 月份([01,12]) |
%M | 分钟([00,59]) |
%H | 小时(24小时制,[0, 23]) |
%I | 小时(12小时制,[0, 11]) |
%S | 秒(范围为[00,61],为什么不是[00, 59],参考python手册_) |
%b | 月份的简写。如12月份为Dec |
%B | 月份的全写。如12月份为December |
%c | 日期时间的字符串表示。(如: Tue Dec 29 00:00:00 2020) |
%a | 星期的简写。如 星期二为Tue |
%A | 星期的全写。如 星期二为Tuesday |
%d | 日在这个月中的天数(是这个月的第几天) |
%f | 微秒(范围[0,999999]) |
%H | 小时(24小时制,[0, 23]) |
%I | 小时(12小时制,[0, 11]) |
%j | 日在年中的天数 [001,366](是当年的第几天) |
%p | AM或者PM |
%U | 周在当年的周数当年的第几周),星期天作为周的第一天 |
%w | 今天在这周的天数,范围为[0, 6],6表示星期天 |
%W | 周在当年的周数(是当年的第几周),星期一作为周的第一天 |
%z | 与utc时间的间隔 (如果是本地时间,返回空字符串) |
%Z | 时区名称(如果是本地时间,返回空字符串) |
%% | %% => % |
3.3 date类属性、方法使用示例代码
- 1)日期类的属性使用代码示例
import datetime
# 创建日期对象
d1 = datetime.date.today()
# 输出日期对象
print(d1)
datetime.date(2020, 12, 29)
# 获取日期对象的最小取值,类属性
d1.min
datetime.date(1, 1, 1)
# 获取日期对象的最大取值,类属性
d1.max
datetime.date(9999, 12, 31)
# 获取日期对象的年份,实例属性
d1.year
2020
# 获取日期对象的月份,实例属性
d1.month
12
# 获取日期对象的天数,实例属性
d1.day
29
- 2)日期类静态方法及实例方法的代码演示:
import time, datetime
# ================================= 静态方法 ======================================
# 日期类静态方法today(),返回一个日期对象
d1 = datetime.date.today()
print(d1)
2020-12-29
# 使用ipython, 输出d1
d1
datetime.date(2020, 12, 29)
# 日期类静态方法fromisoformat('2020-12-30'), 返回一个日期对象
d2 = datetime.date.fromisoformat('2020-12-30')
print(d2)
2020-12-30
# 使用ipython, 输出d2
d2
datetime.date(2020, 12, 30)
# 日期类静态方法fromtimestamp(timestamp), 返回一个日期对象
d3 = datetime.date.fromtimestamp(time.time())
print(d3)
2020-12-29
# 使用ipython, 输出d3
d3
datetime.date(2020, 12, 29)
# ================================= 实例方法 ======================================
# 创建一个date日期对象
d1 = datetime.date(2020,12,29)
# 调用日期对象方法ctime(), 返回一个c格式的日期对象字符串
d1.ctime()
'Tue Dec 29 00:00:00 2020'
# 调用日期对象方法timetuple(), 返回一个struct_time对象
d1.timetuple()
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=364, tm_isdst=-1)
# 调用日期对象方法weekday(), 返回weekday,取值[0~6],如果是星期一,返回0;如果是星期二,返回1,
d1.weekday()
1
# 调用日期对象方法toordinal(), 返回日期对应的Gregorian Calendar日期
d1.toordinal()
737788
# 调用日期对象方法isoweekday(), 返回weekday,取值[1~7],如果是星期一,返回1;如果是星期二,返回2,
d1.isoweekday()
2
# 调用日期对象方法isocalendar(), 返回指定日期是该日期是这一年的第几周、周几这三个值
d1.isocalendar()
(2020, 53, 2)
# 调用日期对象方法isoformat(), 返回格式如'YYYY-MM-DD’的日期字符串
d1.isoformat()
'2020-12-29'
# 调用日期对象方法strftime(), 返回自定义格式的日期字符串
d1.strftime('%Y-%m-%d')
'2020-12-29'
# 调用日期对象方法replace(), 传入参数(year,month,day), 返回一个新日期对象
d1.replace(2020,12,30)
datetime.date(2020, 12, 30)
- 3)日期对象格式化输出的各种方法代码演示:
**from datetime import date
# 创建一个本地日期对象
d = date.today()
# 调用ctime(),输出c格式的日期字符串,相当于date_obj.strftime('%c')
d.ctime(),类型为字符串
'Tue Dec 29 00:00:00 2020'
# 返回日期对象对应星期几的简写,类型为字符串
d.strftime('%a')
'Tue'
# 返回日期对象对应星期几的全拼,类型为字符串
d.strftime('%A')
'Tuesday'
# 返回日期对象对应月份的简写,类型为字符串
d.strftime('%b')
'Dec'
# 返回日期对象对应月份的全拼,类型为字符串
d.strftime('%B')
'December'
# 相当于调用ctime(),输出c格式的日期字符串,类型为字符串
d.strftime('%c')
'Tue Dec 29 00:00:00 2020'
# 返回日期对象对应年份的完整年份,类型为字符串
d.strftime('%Y')
'2020'
# 返回日期对象对应年份的最后两位,类型为字符串
d.strftime('%y')
'20'
# 返回日期对象对应时间的分钟,类型为字符串
d.strftime('%M')
'00'
# 返回日期对象对应时间的月份,类型为字符串
d.strftime('%m')
'12'
# 返回日期对象对应在当年的周数(是当年的第几周),星期一作为周的第一天,类型为字符串
d.strftime('%W')
'52'
# 返回日期对象对应在这周的天数,范围为[0, 6],6表示星期天,类型为字符串
d.strftime('%w')
'2'
# 返回日期对象对应的小时数(24小时制,[0, 23]),类型为字符串
d.strftime('%H')
'00'
# 返回日期对象对应的小时数(12小时制,[0, 11]),类型为字符串
d.strftime('%I')
'12'
# 返回日期对象对应的完整日期字符串,类型为字符串
d.strftime('%x')
'12/29/20'
# 返回日期对象对应的完整时间字符串,类型为字符串
d.strftime('%X')
'00:00:00'
# 返回日期对象对应本地时间的商务还是下午,AM或者PM,类型为字符串
d.strftime('%p')
'AM'
# 返回日期对象为该日期在该年中的天数 [001,366](是当年的第几天),类型为字符串
d.strftime('%j')
'364'
# 返回日期对象与utc时间的间隔 (如果是本地时间,返回空字符串),类型为字符串
d.strftime('%z')
''
# 返回日期对象对应的时区名称(如果是本地时间,返回空字符串),类型为字符串
d.strftime('%Z')
''
# 返回日期对象对应的秒数(范围为[00,61],类型为字符串
d.strftime('%S')
'00'
# 返回日期对象对应在这个月中的天数(是这个月的第几天),类型为字符串
d.strftime('%d')
'29'
# 返回日期对象对应微秒(范围[0,999999]),类型为字符串
d.strftime('%f')
'000000'
# 返回日期对象对应周在当年的周数当年的第几周),星期天作为周的第一天,类型为字符串
d.strftime('%U')
'52'**
4、datetime类
4.1 引用方式
# 第一种方式:
import datetime
# 使用datetime.datetime(2020,12,25,12,30,00)的方式进行调用
# 第二种方式:
from datetime import datetime
# 使用datetime(2020,12,25,0,0,0)的方式进行调用
# 两种方式都可以
4.2 datetime类属性和类方法、实例方法
先在ipython中看一下有哪些属性和方法,再看源码里面具体的方法介绍
- 1)datetime类属性表
属性名称 | 属性类型 | 属性作用解释 |
---|---|---|
datetime.datetime.min | 类属性 | datetime日期时间对象所能表示的最小日期时间 |
datetime.datetime.max | 类属性 | datetime日期时间对象所能表示的最大日期时间 |
datetime.datetime.resolution | 类属性 | 返回datetime日期时间类中的时间间隔最小单位, 默认是microseconds |
datetime.datetime.year | 实例属性 | 返回datetime日期时间对象中的年份 |
datetime.datetime.month | 实例属性 | 返回datetime日期时间对象中的月份 |
datetime.datetime.day | 实例属性 | 返回datetime日期时间对象中的天数 |
datetime.datetime.hour | 实例属性 | 返回datetime日期时间对象中的小时 |
datetime.datetime.minute | 实例属性 | 返回datetime日期时间对象中的分钟 |
datetime.datetime.second | 实例属性 | 返回datetime日期时间对象中的秒数 |
datetime.datetime.microsecond | 实例属性 | 返回datetime日期时间对象中的微秒数 |
datetime.datetime.fold | 实例属性 | 返回datetime日期时间对象的属性,默认取值为0 |
- 2)datetime类类方法表
类方法名 | 方法类型 | 传参说明 | 方法作用解释 |
---|---|---|---|
datetime.datetime.today() | 静态方法 | 无 | 返回一个表示当前本地时间的datetime对象; |
datetime.datetime.now([tz]) | 静态方法 | [, tz] | 返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间; |
datetime.datetime.utcnow() | 静态方法 | 无 | 返回一个UTC时区的datetime对象; |
datetime.datetime.fromtimestamp(timestamp[, tz]) | 静态方法 | timestamp | 根据时间戮创建一个datetime对象,参数tz指定时区信息; |
datetime.datetime.utcfromtimestamp(timestamp) | 静态方法 | 日期字符串 | 返回一个utc时区的datetime对象; |
datetime.datetime.fromisoformat() | 静态方法 | ‘YYYY-mm-dd H-i-s’ | 返回一个datetime对象; |
datetime.datetime.combine(date_obj, time_obj) | 静态方法 | date_obj,time_obj | 将一个日期对象和一个时间对象组合返回一个datetime对象; |
datetime.strptime(date_string, format) | 静态方法 | 无 | 将格式字符串转换为datetime对象 |
- 3)datetime类实例方法表
实例方法 | 方法类型 | 传参说明 | 方法作用解释 |
---|---|---|---|
datetime.date() | 实例方法 | 无,直接使用datetime对象调用 | 获取date对象 |
datetime.time() | 实例方法 | 无,直接使用datetime对象调用 | 获取time对象 |
datetime.datetime.replace() | 实例方法 | year,month,day,hour,minute,second | 生成一个新的datetime对象; |
datetime.datetime.timetuple() | 实例方法 | 无,直接使用datetime对象调用 | 返回datetime对应的本地日期时间struct_time对象; |
datetime.datetime.utctimetuple() | 实例方法 | 无,直接使用datetime对象调用 | 返回datetimede UTC时区下对应的本地日期时间struct_time对象; |
datetime.datetime.toordinal() | 实例方法 | 无,直接使用datetime对象调用 | 返回datetime对应的Gregorian Calendar日期; |
datetime.datetime.weekday() | 实例方法 | 无,直接使用datetime对象调用 | 返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; |
datetime.datetime.isoweekday() | 实例方法 | 无,直接使用datetime对象调用 | 返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; |
datetime.datetime.isocalendar() | 实例方法 | 无,直接使用datetime对象调用 | 返回指定datetime对象是该日期时间是这一年的第几周、周几这三个值; |
datetime.datetime.isoformat() | 实例方法 | fmt日期格式化字符串 | 返回格式如’YYYY-MM-DD’的字符串; |
datetime.datetime.ctime() | 实例方法 | 无,直接使用datetime对象调用 | 将一个时间戳(默认为当前时间)返回一个格式为"周几 月份-天数 00:00:00 年份"的字符串 |
datetime.datetime.strftime(fmt_str) | 实例方法 | 日期时间字符串 | 返回一个表示当前本地日期的datetime对象自定义格式化字符串;字符串格式化字符见下表 |
4.3 datetime类属性、方法使用示例代码
- 1)日期时间类的属性使用代码示例
import datetime
# 创建日期时间对象
dt = datetime.datetime.today()
# 打印日期时间对象
print(dt)
2020-12-29 16:24:25.664795
# 使用ipython打印日期时间对象
dt
datetime.datetime(2020, 12, 29, 16, 24, 25, 664795)
# 打印日期时间类最小取值,类属性
dt.min
datetime.datetime(1, 1, 1, 0, 0)
# 打印日期时间类最大取值,类属性
dt.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
# 打印日期时间对象的默认最小间隔单位属性, 类属性
dt.resolution
datetime.timedelta(microseconds=1)
# 打印日期时间对象的年份,实例属性
dt.year
2020
# 打印日期时间对象的月份,实例属性
dt.month
12
# 打印日期时间对象的天数,实例属性
dt.day
29
# 打印日期时间对象的小时,实例属性
dt.hour
16
# 打印日期时间对象的分钟,实例属性
dt.minute
24
# 打印日期时间对象的秒,实例属性
dt.second
25
# 打印日期时间对象的微秒,实例属性
dt.microsecond
664795
# 打印日期时间对象的fold实例属性
dt.fold
0
- 2)日期类静态方法及实例方法的代码演示:
import datetime, time
# ================================= 静态方法 ======================================
import datetime
# 调用datetime对象方法today(), 返回一个datetime对象
dt1 = datetime.datetime.today()
print(dt1)
# 调用datetime对象方法now(), 返回一个datetime对象
dt2 = datetime.datetime.now()
print(dt2)
2020-12-29 17:04:00.934159
# 调用datetime对象方法now(), 传递一个timezone对象参数,返回一个datetime对象
tz = datetime.timezone(datetime.timedelta(hours=8))
dt3 = datetime.datetime.now(tz=tz)
print(dt3)
2020-12-29 17:05:36.362897+08:00
# 调用datetime对象方法utcnow(), 返回一个datetime对象
dt4 = datetime.datetime.utcnow()
print(dt4)
2020-12-29 09:06:05.074215
import time
# 调用datetime对象方法fromtimestamp(), 传递一个时间戳对象,返回一个datetime对象
dt5 = datetime.datetime.fromtimestamp(time.time())
print(dt5)
2020-12-29 17:09:26.367811
# 调用datetime对象方法fromtimestamp(), 传递一个时间戳对象和timezone对象,返回一个datetime对象
dt6 = datetime.datetime.fromtimestamp(time.time(), tz=tz)
print(dt6)
2020-12-29 17:10:04.217299+08:00
# 调用datetime对象方法utcfromtimestamp(), 传递一个时间戳对象,返回一个datetime对象
dt7 = datetime.datetime.utcfromtimestamp(time.time())
print(dt7)
2020-12-29 09:10:36.116120
# 调用datetime对象方法fromisoformat(), 传递一个日期时间字符串,返回一个datetime对象
dt8 = datetime.datetime.fromisoformat('2020-12-29 12:00:00')
print(dt8)
2020-12-29 12:00:00
# 调用datetime对象方法combine(), 传递一个日期对象和一个时间对象,返回一个datetime对象
dt9 = datetime.datetime.combine(datetime.date(2020,12,29), datetime.time(12,30,0))
print(dt9)
2020-12-29 12:30:00
# 调用datetime对象方法strptime(), 传递一个日期时间字符串和一个日期时间格式化字符串,返回一个datetime对象
dt10 = datetime.datetime.strptime('2020-01-01 0:0:0', '%Y-%m-%d %H:%M:%S')
print(dt10)
2020-01-01 00:00:00
dt10
datetime.datetime(2020, 1, 1, 0, 0)
# ================================= 实例方法 ======================================
# 创建一个datetime日期时间对象
d1 = datetime.datetime(2020,12,29,12,30,30)
# 调用datetime对象方法ctime(), 返回一个c格式的日期对象字符串
d1.ctime()
'Tue Dec 29 00:00:00 2020'
# 调用datetime对象方法timetuple(), 返回一个struct_time对象
d1.timetuple()
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=364, tm_isdst=-1)
# 调用datetime对象方法weekday(), 返回weekday,取值[0~6],如果是星期一,返回0;如果是星期二,返回1,
d1.weekday()
1
# 调用datetime对象方法toordinal(), 返回日期时间对应的Gregorian Calendar日期
d1.toordinal()
737788
# 调用datetime对象方法isoweekday(), 返回weekday,取值[1~7],如果是星期一,返回1;如果是星期二,返回2,
d1.isoweekday()
2
# 调用datetime对象方法isocalendar(), 返回指定日期时间是该日期是这一年的第几周、周几这三个值
d1.isocalendar()
(2020, 53, 2)
# 调用datetime对象方法isoformat(), 返回格式如'YYYY-MM-DD’的日期时间字符串
d1.isoformat()
'2020-12-29'
# 调用datetime对象方法strftime(), 返回自定义格式的日期时间字符串
d1.strftime('%Y-%m-%d %H:%M:%S')
'2020-12-29 12:30:30'
# 调用datetime对象方法replace(), 传入参数(year,month,day,hour,minute,second), 返回一个新datetime对象
d1.replace(2020,12,30, 13, 25, 10)
datetime.date(2020, 12, 30, 13, 25, 10)