datetime基于time进行了封装,提供了很多实用的函数
datetime模块主要有以下四个类
date:表示日期的类
time:表示时间的类
datetime:表示日期和时间
timedelta:表示时间间隔,用于时间偏移
上面这4个类型的对象都是不可变类型。
1.date类
该类主要定义了一些常用的类属性和类方法
1.1 属性
1.1.1 min属性
date对象所能表示的最小日期
from datetime import date
print(date.min)
result:
0001-01-01
1.1.2 max属性
date对象所能表示的最大日期
print(date.max)
result:
9999-12-31
1.1.3 resolution属性
date对象的最小单位,这里是天
print(date.resolution)
result:
1 day, 0:00:00
1.1.4 year属性
日期中的年
today = date.today()
print(today.year)
result:
2021
1.1.5 month属性
日期中的月
today = date.today()
print(today.month)
result:
11
1.1.6 day属性
日期中的日
today = date.today()
print(today.day)
result:
16
1.2 方法
1.2.1 today()方法
返回一个表示当前本地日期的date对象
today = date.today()
print(today)
result:
2021-11-25
1.2.2 fromtimestamp()方法
根据给定的时间戳,返回一个date对象
t1 = date.fromtimestamp(999999)
print(t1)
result:
1970-01-12
1.2.3 replace()方法
生成一个新的日期对象,用参数指定的年月日替代原有对象中的年月日,原有对象保持不变
today = date.today()
print(today.replace(year=2009))
result:
2009-11-25
print(today.replace(year=2009))
result:
2021-11-25
1.2.4 weekday()方法
星期几,周一返回0,依次类推
print(today.weekday())
result:
3
1.2.5 isoweekday()方法
星期几,周一返回1,依次类推
print(today.isoweekday())
result:
4
1.2.6 isocalendar()方法
返回一个时间元组,(年份,一年中的第几周,本周的第几天)
print(today.isocalendar())
result:
(2021, 47, 4)
1.2.7 isoformat()方法
返回'YYYY-MM-DD'形式的日期字符串
print(today.isoformat())
result:
2021-11-25
1.2.8 strftime()方法
与time模块的strftime()方法类似,也是用于格式化字符串
2.timedelta类
timedelta对象用于表示一个时间长度,两个日期或者时间的差值。
其函数参数如下:
class timedelta([days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0])
所有参数都是可选的,默认为0.参数可以是整数或者浮点数,也可以整数或者负数。
虽然参数可以传递的单位很多,但是python内部只存储了days、seconds、microseconds三种单位,其他单位在计算时都要转换为这三种单位。具体转换如下:
1 millisecond = 1000 microseconds
1 minute = 60 seconds
1 hour = 3600 seconds
1 week = 7 days
下面举几个常用的例子
先来看一下今天的日期
from datetime import timedelta,datetime
today = datetime.today()
print(today.date())
result:
2021-11-27
2.1 获取昨天的日期
yesterday = today + timedelta(days=-1)
print(yesterday.date())
result:
2021-11-26
2.2 获取明天的日期
tomorrow = today + timedelta(days=1)
print(tomorrow.date())
result:
2021-11-28
2.3 计算两个日期之间的天数
print(yesterday - tomorrow)
result:
-2 days, 0:00:00
print((yesterday - tomorrow).days)
result:
-2
如上所说,对于两个日期之间的差值,只有days、seconds、microseconds这三个属性。其他的诸如两个日期差了几年,几个月,几个周这种需求,没有办法直接获取,需要通过days、seconds、microseconds进行转换。
2.4 获取时间间隔后的格式化日期时间
from datetime import timedelta,datetime
now = datetime.now()
print(now.strftime("%y-%m-%d %H:%M:%S"))
result:
21-11-27 15:35:22
print((now+timedelta(hours=1)).strftime("%y-%m-%d %H:%M:%S"))
result:
21-11-27 16:35:22
上面只是以日期时间举例说明。事实上,datetime对象中的date类、time类和datetime类都可以参与这种日期计算
3.time类
3.1 属性
3.1.1 min属性
time对象所能表示的最小时间
from datetime import time
print(time.min)
result:
00:00:00
3.1.2 max属性
time对象所能表示的最大日期
print(time.max)
result:
23:59:59.999999
3.1.3 resolution属性
time对象的最小单位,这里是微秒
print(time.resolution)
result:
0:00:00.000001
3.1.4 hour属性
时间中的时
t1 = time(12, 23, 46)
print(t1.hour)
result:
12
3.1.5 mintue属性
时间中的分
print(t1.minute)
result:
23
3.1.6 second属性
时间中的秒
print(t1.second)
result:
46
3.1.7 microsecond属性
时间中的微秒
print(t1.microsecond)
result:
0
3.1.8 tzinfo属性
时区信息
print(t1.tzinfo)
result:
None
3.2 方法
3.2.1 replace()方法
生成一个新的时间对象,用参数指定的时分秒替代原有对象中的时分秒,原有对象保持不变
t1 = time(12, 23, 46)
print(t1.replace(hour=2))
result:
02:23:46
print(t1)
result:
12:23:46
3.2.2 isformat()方法
返回'HH:MM:SS'形式的时间字符串
print(t1.isoformat())
result:
12:23:46
3.2.3 strftime()方法
与time模块的strftime()方法类似,也是用于格式化字符串
4.datetime类
datetime是date和time的结合体,包括date和time的所有信息。
4.1 属性
4.1.1 min属性
datetime对象所能表示的最小日期时间
from datetime import datetime
print(datetime.min)
result:
0001-01-01 00:00:00
4.1.2 max属性
datetime对象所能表示的最大日期时间
print(datetime.max)
result:
9999-12-31 23:59:59.999999
4.1.3 resolution属性
datetime对象的最小单位,这里是微秒
print(datetime.resolution)
result:
0:00:00.000001
4.1.4 year属性
datetime对象中的年
today = datetime.today()
print(today.year)
result:
2021
4.1.5 month属性
datetime对象中的月
today = date.today()
print(today.month)
result:
11
4.1.6 day属性
datetime对象中的日
today = date.today()
print(today.day)
result:
27
4.1.7 hour属性
datetime对象中的时
print(today.hour)
result:
12
4.1.8 mintue属性
datetime对象中的分
print(today.minute)
result:
5
4.1.9 second属性
datetime对象中的秒
print(today.second)
result:
51
4.1.10 microsecond属性
datetime对象中的微秒
print(today.microsecond)
result:
560464
4.1.11 tzinfo属性
datetime对象的时区信息
print(today.tzinfo)
result:
None
4.2 方法
4.2.1 today()方法
返回一个表示当前本地日期时间的datetime对象
print(datetime.today())
result:
2021-11-27 11:14:31.754096
4.2.2 now()方法
返回一个表示当前本地日期时间的datetime对象。如果提供了参数tz,则获取参数tz所指时区的本地时间
print(datetime.now())
result:
2021-11-27 11:45:37.213666
from datetime import datetime
import pytz
print(datetime.now(pytz.timezone('America/Manaus')))
result:
2021-11-26 23:45:37.274950-04:00
4.2.3 utcnow()方法
返回一个当前UTC时间的datetime对象
print(datetime.utcnow())
result:
2021-11-27 03:46:43.699301
4.2.4 fromtimestamp()方法
根据给定的时间戳,返回一个datetime对象
print(datetime.fromtimestamp(999999))
result:
1970-01-12 21:46:39
4.2.5 fromtimestamp()方法
根据给定的时间戳,返回一个UTC时间的datetime对象
print(datetime.utcfromtimestamp(999999))
result:
1970-01-12 13:46:39
4.2.6 combine()方法
根据date和time,创建一个datetime对象
from datetime import datetime, date, time
date1 = date(2019, 12, 23)
time1 = time(12, 34, 45)
print(datetime.combine(date1, time1))
result:
2019-12-23 12:34:45
4.2.7 strftime()方法
与time模块的strftime()方法类似,也是用于格式化字符串
4.2.8 strfptime()方法
与strftime()方法相反,将格式化字符串转换为datetime对象
print(datetime.strptime("2019-5-1 5:54:45", '%Y-%m-%d %H:%M:%S'))
result:
2019-05-01 05:54:45
4.2.9 date()方法
获取datetime对象中的date
print(today.date())
result:
2021-11-27
4.2.10 date()方法
获取datetime对象中的date
print(today.time())
result:
12:09:32.355739
4.2.11 replace()方法
生成一个新的datetime对象,用参数指定的时分秒替代原有对象中的时分秒,原有对象保持不变
print(today.replace(hour=2))
result:
2021-11-27 02:11:32.253015
print(t1)
result:
2021-11-27 12:11:32.253015
4.2.12 isformat()方法
返回'YYYY-MM-DDTHH:MM:SS'形式的时间日期字符串
print(t1.isoformat())
result:
2021-11-27T12:12:29.065264
4.2.13 weekday()方法
星期几,周一返回0,依次类推
print(today.weekday())
result:
5
4.2.14 isoweekday()方法
星期几,周一返回1,依次类推
print(today.isoweekday())
result:
6
4.2.15 isocalendar()方法
返回一个时间元组,(年份,一年中的第几周,本周的第几天)
print(today.isocalendar())
result:
(2021, 47, 6)
4.2.16 timetuple()方法
返回truct_time类型的当前时间元组
print(today.timetuple())
result:
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=27, tm_hour=12, tm_min=29, tm_sec=13, tm_wday=5, tm_yday=331, tm_isdst=-1)
4.2.16 utctimetuple()方法
返回truct_time类型的UTC时间元组
print(today.utctimetuple())
result:
time.struct_time(tm_year=2021, tm_mon=11, tm_mday=27, tm_hour=12, tm_min=29, tm_sec=13, tm_wday=5, tm_yday=331, tm_isdst=0)
4.2.17 toordinal()方法
返回该日期在公历中的序数
print(today.toordinal())
result:
738121
4.2.18 ctime()方法
返回星期 月日 时:分:秒 年形式的日期时间
print(today.ctime())
result:
Sat Nov 27 12:36:37 2021