一、datetime模块重新封装了time模块,提供了更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
(一)、datetime模块中包含如下类:
datetime中类的介绍
(二)、datetime模块中包含的常量
datetime模块中的常量
from datetime import *
a = MAXYEAR
b = MINYEAR
print(a) #9999
print(b) #1
import datetime
a = datetime.MAXYEAR
b = datetime.MINYEAR
print(a) #9999
print(b) #1
二、date类
(一)、date对象构成
1、date对象由year,month,day三部分构成:
date(year, month, day)
2、通过year,month,day三个数据描述符可以进行访问:
import datetime
a = datetime.date.today()
print(a) #2020-02-16
a = datetime.date(2013, 3, 2)
print(a.year) #2013
print(a.month) #3
print(a.day) #2
(二)date类的属性和方法
属性import datetime
a = datetime.date.today()
print(a) #2020-02-16
a = datetime.date(2013, 3, 2)
print(a.year) #2013
print(a.month) #3
print(a.day) #2
print(datetime.date.day)
print(datetime.date.max)
1)today()获取今天的日期
a = datetime.date.today()
print(a) #2020-02-16
print(a.day) #16
print(a.month) #2
print(a.year) #2020
print(a.replace(2019)) #替换日期,可以分别替换年月日
print(a.weekday()) #获得星期,默认从周日(0)开始
print(a.__getattribute__('year')) #2020
print(a.__getattribute__('month')) #2
print(a.__getattribute__('day')) #16
2)用于日期比较大小的方法---返回True和False
用于日期比较大小的方法import datetime
a = datetime.date(2017, 3, 1)
b = datetime.date(2017, 3, 15)
print(a.__eq__(b)) #False
print(a.__ge__(b)) #False
print(a.__gt__(b)) #False
print(a.__le__(b)) #True
print(a.__lt__(b)) #True
print(a.__ne__(b)) #True
3)获取两个日期相差多少天
使用sub()和rsub()方法,其实两个方法查不太多,一个是正向操作,一个是反向操作:
import datetime
a = datetime.date(2017, 3, 1)
b = datetime.date(2017, 3, 15)
print(a.__sub__(b)) #-14 days, 0:00:00
print(a.__rsub__(b)) #14 days, 0:00:00 #计算结果的返回值类型为datetime.timedelta,如果获得整数类型的结果则按下面的方法操作
print(a.__sub__(b).days) #-14
4)ISO标准化日期
ISO标准:国际标准化组织的国际标准ISO 8601是日期和时间的表示方法。年由4位数组成,以公历公元1年为0001年,以公元前1年为0000年,公元前2年为-0001年,其他以此类推。以下是IOS的链接:
https://baike.baidu.com/item/ISO%208601/3910715?fr=aladdin
a)x.isocalendar():返回一个包含三个值的元组,三个值依次为:年份,周数,星期数(周一为1,周日为7)
import datetime
a = datetime.date(2020, 2, 16)
print(a.isocalendar()) #(2020, 7, 7)
print(a.isocalendar()[0]) #2020
print(a.isocalendar()[1]) #7
print(a.isocalendar()[2]) #7
b)x.isoformat():返回符合ISO 8601标准(YYYY-MM-DD)的日期字符串;
import datetime
a = datetime.date(2020, 2, 16)
print(a.isoformat()) #2020-02-16
c)x.isoweekday():返回符合ISO标准的指定日期所在的星期数(周一为1,周日为7)
import datetime
a = datetime.date(2020, 2, 16)
print(a.isoweekday()) #7
d)与isoweekday()相似的还有一个weekday()方法,只不过是weekday()方法返回的周一为0,周日为6
import datetime
a = datetime.date(2020, 2, 16)
print(a.weekday()) #6
5)x.timetuple():该方法为了兼容time.localtime()返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0;
import datetime
a = datetime.date(2020, 2, 16)
print(a.timetuple()) #time.struct_time(tm_year=2020, tm_mon=2, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=47, tm_isdst=-1)
print(a.timetuple().tm_year) #2020
print(a.timetuple().tm_mon) #2
print(a.timetuple().tm_mday) #16
6)x.toordinal():返回公元公历开始到现在的天数。公元1年1月1日为1;
import datetime
a = datetime.date(2020, 2, 16)
print(a.toordinal()) #737471
7)x.replace():返回一个替换指定日期字段的新date对象。参数---3个可选参数,分别为year,month,day。注意:替换产生新对象,不影响原date对象;
import datetime
a = datetime.date(2020, 2, 16)
b = a.replace(2013, 1, 1)
print(a) #2020-02-16
print(b) #2013-01-01
8)x.resolution:date对象表示日期的最小单位。这里是天。
import datetime
print(datetime.date.resolution) #1 day, 0:00:00
9)x.fromordinal():将Gregorian日历时间转换为date对象;Gregorian Calendar:一种日历表示方法,类似于我国的农历,西方国家使用比较多。
import datetime
a = datetime.date(2017, 3, 22)
b = a.toordinal()
print(datetime.date.fromordinal(b)) #2017-03-22
#toordinal()与fromordinal()正好是相反的
10)x.fromtimestamp():根据给定的时间戳,返回一个date对象;
import datetime
import time
time.time()
print(datetime.date.fromtimestamp(time.time())) #2020-02-17
11)x.format()方法以指定格式进行日期输出:
import datetime
a = datetime.date(2020, 2, 17)
print(a.__format__('%Y-%m-%d')) #2020-02-17
print(a.__format__('%Y/%m/%d')) #2020/02/17
print(a.__format__('%y/%m/%d')) #20/02/17
print(a.__format__('%D')) #02/17/20
12)简单的获得日期的字符串,则使用str()
import datetime
a = datetime.date(2020, 2, 17)
print(type(a)) #<class 'datetime.date'>
print(a)#2020-02-17
print(type(a.__str__()))#<class 'str'>
print(a.__str__())#2020-02-17
13)如果想要获取ctime样式的格式请使用ctime();
import datetime
a = datetime.date(2020, 2, 17)
print(type(a)) #<class 'datetime.date'>
print(a)#2020-02-17
print(type(a.ctime())) #<class 'str'>
print(a.ctime()) # Mon Feb 17 00:00:00 2020
三、time类
(一)、time类的数据构成
time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成
time(hour,minute,second,microsecond,tzinfo),相应的,time类中就有上述五个变量来存储应该的值。
import datetime
a = datetime.time(12, 20, 59, 899)
print(a) #12:20:59.000899
print(a.hour) #12
print(a.minute) #20
print(a.second) #59
print(a.microsecond) #899
print(a.tzinfo) #None
(二)、time类中的方法和属性
1)比较时间大小
import datetime
a = datetime.time(12, 20, 59, 899)
b = datetime.time(11, 20, 59, 889)
print(a.__eq__(b)) #False
print(a.__ne__(b)) #True
print(a.__gt__(b)) #True
print(a.__ge__(b)) #True
print(a.__le__(b)) #False
print(a.__lt__(b)) #False
2)x.format()方法以指定格式进行时间输出,将时间对象转化为字符串对象;
import datetime
a = datetime.time(12, 20, 59, 899)
print(a.__format__('%H:%M:%S')) #12:20:59
import datetime
a = datetime.time(12, 20, 59, 899)
print(a.strftime('%H:%M:%S')) #12:20:59 strftime<===>__format__()
3)ISO标准输出:如果要使输出的时间字符符合ISO标准,请使用isoformat():
import datetime
a = datetime.time(12, 20, 59, 899)
print(a) #12:20:59.000899
print(type(a)) #<class 'datetime.time'>
print(a.isoformat()) #12:20:59.000899
print(type(a.isoformat())) #<class 'datetime.time'>
4)str()简单的获取时间的字符串
import datetime
a = datetime.time(12, 20, 59, 899)
print(a.__str__()) #12:20:59.000899
5)max:最大的时间表示数值;min:最小的时间表示数值;
import datetime
print(datetime.time.max) #23:59:59.999999
print(datetime.time.min) #00:00:00
6)resolution:时间间隔单位为毫秒
import datetime
print(datetime.time.resolution) #0:00:00.000001
四、datetime类
(一)、datetime类的数据构成
datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这两个类;
datetime(year,month,day,hour,minute,second,microsecond,tzinfo)
(二)、专属于datetime的方法和属性
1)now():返回当前日期时间的datetime对象:
import datetime
a = datetime.datetime.now()
print(a) #2020-02-17 18:17:28.334464
2)date():返回datetime对象的日期部分:
import datetime
a = datetime.datetime.now()
print(a.date())#2020-02-17
3)time():返回datetime对象的时间部分:
import datetime
a = datetime.datetime.now()
print(a.time())#18:24:04.186105
4)combine():将一个date对象和一个time对象合并成一个datetime对象:
import datetime
a = datetime.datetime.now()
print(a) #2020-02-18 14:58:48.533698
print(datetime.datetime.combine(a.date(), a.time())) #2020-02-18 14:58:48.533698
5)utctimetuple():返回UTC时间元组:
import datetime
a = datetime.datetime.now()
print(a.utctimetuple())#time.struct_time(tm_year=2020, tm_mon=2, tm_mday=18, tm_hour=15, tm_min=14, tm_sec=18, tm_wday=1, tm_yday=49, tm_isdst=0)
6)utcnow():返回当前日期时间的UTC datetime对象:https://www.jianshu.com/p/c403b2906da5
import datetime
a = datetime.datetime.now()
b = datetime.datetime.utcnow()
print(a)#2020-02-18 15:31:19.335277
print(b)#2020-02-18 07:31:19.335277
7)strptime():根据string,format 2个参数,返回一个对应的datetime对象:
import datetime
a = datetime.datetime.strptime('2017-3-22 15:25', '%Y-%m-%d %H:%M')#string数据和format格式必须一致
print(a)#2017-03-22 15:25:00
8)utcformtimestamp():UTC时间戳的datetime对象,时间戳值为time.time():
import datetime
import time
print(datetime.datetime.utcfromtimestamp(time.time())) #2020-02-19 06:53:08.412366
五、timedelta类
timedelta类是用来表示两个datetime对象的差值的。此类中包含如下属性:1、days:天数 2、microseconds:微秒数(>=0并且<1秒)3、seconds:秒数(>=0并且<1天)4、hours 5、minutes 6、weeks
"""
获取上个月第一天和最后一天的日期
"""
import datetime
today = datetime.date.today()
mlast_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1)
print('-'*30)
print(mlast_day) #2020-01-31
print('-'*30)
mfirst_day = datetime.date(mlast_day.year, mlast_day.month, 1)
print(mfirst_day) #2020-01-01
"""
计算当前时间向后8个小时的时间
"""
import datetime
d1 = datetime.datetime.now()#计算当前的日期时间
d2 = d1 + datetime.timedelta(hours=8)
print(d2)
"""
计算上周一和周日的日期
"""
import datetime
today = datetime.date.today()
today_weekday = today.isoweekday()
last_sunday = today - datetime.timedelta(days=today_weekday)
last_monday = last_sunday - datetime.timedelta(days=6)
#上周一
print(last_monday) #2020-02-10
#上周日
print(last_sunday) #2020-02-16
"""
计算指定日期当月最后一天的日期和本月天数
思路:首先我们要避免因为月份的不同产生不同的天数,可以通过判断该月份是不是12月份,然后确定出下个月的第一天,再减去一天,计算出上个月的最后一天
"""
import datetime
def emonth(date_object):
if date_object.month == 12:
next_month_first_date = datetime.date(date_object.year + 1, 1, 1)
else:
next_month_first_date = datetime.date(date_object.year, date_object.month + 1, 1)
month_last_day_date = next_month_first_date - datetime.timedelta(1)
#
print(month_last_day_date) #2017-03-31
print(month_last_day_date.day) #31
#指定日期
date = datetime.date(2017, 3, 12)
#调用函数
emonth(date)
"""
计算指定日期下个月当天的日期
"""
import datetime
#该函数的功能就是返回指定日期当月最后一天的日期的返回值
def emonth(date_object):
if date_object.month == 12:
next_month_first_date = datetime.date(date_object.year + 1, 1, 1)
else:
next_month_first_date = datetime.date(date_object.year, date_object.month + 1, 1)
month_last_day_date = next_month_first_date - datetime.timedelta(1)
#返回本月最后一天的日期
return month_last_day_date
#该函数的功能就是返回指定日期下个月当天的日期
def edate(date_object):
if date_object.month == 12:#如果指定日期是12月,那么下个月一定是明年的一月份
next_month_date = datetime.date(date_object.year+1, 1, date_object.day)
else:#考虑到每个月的天数可能不同,为了避免出现问题,所以我们先计算出下个月的第一天,
next_month_first_day = datetime.date(date_object.year, date_object.month+1, 1)
if date_object.day > emonth(next_month_first_day).day:
next_month_date = datetime.date(date_object.year, date_object.month+1, emonth(next_month_first_day).day)
else:
next_month_date = datetime.date(date_object.year, date_object.month+1, date_object.day)
print(next_month_date) #显示一下运算结果,用来进行检测
return next_month_date
#指定日期
date = datetime.date(2017,12,20)
edate(date) #2018-01-20
网友评论