美文网首页
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