datetime模块

一、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对象://www.greatytc.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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容