美文网首页
datetime模块

datetime模块

作者: 指向远方的灯塔 | 来源:发表于2020-02-20 12:25 被阅读0次

一、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

相关文章

网友评论

      本文标题:datetime模块

      本文链接:https://www.haomeiwen.com/subject/qvkrfhtx.html