来源:AI入门学习 作者:小伍哥 datetime模块提供了用于处理日期和时间的类和对应的方法,一般用于处理年、月、日、时、分、秒的统计和计算等需求。在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。 学习该模块,首先要有一个概念:日期和时间,要不然会混乱,这里进行狭义的理解即可:日期是日期,时间是时间,日常生活中有时候并没有很好的去区分。 日期:年月日,如20210612 时间:时分秒,如20:45:50 Python标准库中包含日期(date)和时间(time)的数据类型,还有日历方面的功能。要比较系统的学习该模块,需要了解下面的两个概念。 UTC(全球标准时间):是全球范围内计时的科学标准,它基于精心维护的原子钟,在全球范围内精确到微秒,由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。作为全球最精确的时间系统,天文学家、航海家、太空跟踪网(DSN)以及其他科学性学科都使用它,它的参考点是英国格林威治标准时间(GMT):地球本初子午线的午夜,也是UTC的午夜(00:00:00。000000)。本地时间是根据地球上不同时区所处的位置调整UTC得来的,比如当美国加州的太平洋时间为正午12:00:00时,UTC为20:00:00。 夏令时(DST):表示为了节约能源,人为规定时间的意思。也叫夏时制,夏时令(DaylightSavingTime:DST),又称日光节约时制和夏令时间,在这一制度实行期间所采用的统一时间称为夏令时间。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。 感知型和简单型对象:日期和时间对象可以根据它们是否包含时区信息而分为感知型和简单型两类。充分掌握应用性算法和政治性时间调整信息例如时区和夏令时的情况下,一个感知型对象就能相对于其他感知型对象来精确定位自身时间点。感知型对象是用来表示一个没有解释空间的固定时间点。简单型对象没有包含足够多的信息来无歧义地相对于其他datetime对象来定位自身时间点。 时间戳:Unix时间戳是从1970年1月1日(UTCGMT的午夜)开始所经过的秒数,不考虑闰秒。Unix时间戳(英文为Unixepoch,Unixtime,POSIXtime或Unixtimestamp)importtimetime。time()1625483470。3409266 一、datetime模块概 Python内置的时间模块datetime包含下面的模块包含六个类和两个常数,提供了用于处理日期和时间的类和对应的方法,一般用于处理年、月、日、时、分、秒的统计和计算等需求,且这些类型的对象都是不可变的。最常用的是datetime。datetime,有些人误以为就一个模块,其实是datetime模块下的datetime类。 常量、类或方法名 注解 datetime。date 一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。属性包含:year,month,day。 datetime。time 一个独立于任何特定日期的理想化时间,它假设每一天都恰好等于246060秒。这里没有闰秒的概念)包含属性:hour、minute、second、microsecond、tzinfo。 datetime。datetime 是日期和时间的结合,属性包含year、month、day、hour、minute、second、microsecond、tzinfo。表示日期时间 datetime。timedelta 表示两个date对象或者time对象,或者datetime对象之间的时间间隔,精确到微秒。 datetime。tzinfo 一个描述时区信息对象的抽象基类。用来给datetime和time类提供自定义的时间调整概念(例如处理时区和或夏令时)。 datetime。timezone 一个实现了tzinfo抽象基类的子类,用于表示相对于世界标准时间(UTC)的偏移量。 datetime。MINYEAR 常量,表示年份允许的最小值为1 datetime。MAXYEAR 常量,表示年份允许的最大值为9999 书接上回,接着写二、datetime。date类 1、date类介绍 作用:date类用来处理日期信息 语法:date类是datetime的内嵌类,实例化语法:datetime。date(year,month,day) 参数:year年份、month月份及day日期,所有参数都是必要的,参数必须是在下面范围内的整数 MINYEARyearMAXYEAR 1month12 1day给定年月对应的天数 如果参数不在这些范围内,则抛出ValueError异常。importdatetimetdatetime。date(2019,8,26)print(type(t))print(t。day,t。month,t。year)classdatetime。date2682019 通过内置函数dir,可以查看date类的所有方法和属性fromdatetimeimportdateprint(dir(date))〔ctime,day,fromisocalendar,fromisoformat,fromordinal,fromtimestamp,isocalendar,isoformat,isoweekday,max,min,month,replace,resolution,strftime,timetuple,today,toordinal,weekday,year〕 2、类方法 date。today() 作用:返回当前的本地日期,等价于date。fromtimestamp(time。time())。fromdatetimeimportdatedate。today()datetime。date(2021,7,4) date。fromtimestamp() 作用:返回对应于POSIX时间戳的当地时间,例如time。time()返回的就是时间戳。这可能引发OverflowError,如果时间戳数值超出所在平台Clocaltime()函数的支持范围的话,并且会在localtime()出错时引发OSError。通常该数值会被限制在1970年至2038年之间。请注意在时间戳概念包含闰秒的非POSIX系统上,闰秒会被fromtimestamp()所忽略。 在3。3版更改:引发OverflowError而不是ValueError,如果时间戳数值超出所在平台Clocaltime()函数的支持范围的话,并会在localtime()出错时引发OSError而不是ValueError。 用法:date。fromtimestamp(timestamp)fromdatetimeimportdatedate。fromtimestamp(13391199000001e3)。strftime(YmdH:M)2012060700:00date。fromtimestamp(13391208000001e3)。strftime(YmdH:M)2012060700:00 注意:unix时间戳是从1970年1月1日(UTCGMT的午夜)开始所经过的秒数,不考虑闰秒。 date。fromordinal() 作用:返回对应于预期格列高利历序号的日期,其中公元1年1月1晶的序号为1。 用法:date。fromordinal(ordinal)fromdatetimeimportdateddate。fromordinal(730920)730920thdayafter1。1。0001ddatetime。date(2002,3,11) date。fromisoformat() 作用:返回一个对应于以YYYYMMDD格式给出的datestring的date对象 用法:date。fromisoformat(datestring)fromdatetimeimportdatedate。fromisoformat(20191204)datetime。date(2019,12,4) 这是date。isoformat()的逆操作。它只支持YYYYMMDD格式。更通用的要用strptimed。isoformat()20020311 date。fromisocalendar() 作用:返回指定year,week和day所对应ISO历法日期的date。这是函数date。isocalendar()的逆操作。 用法:date。fromisocalendar(year,week,day) 今年的42周第三天是10月20号date。fromisocalendar(2021,42,3)datetime。date(2021,10,20) 3、类属性 date。min 最小的日期date(MINYEAR,1,1)。fromdatetimeimportdatedate。mindatetime。date(1,1,1) date。max 最大的日期,date(MAXYEAR,12,31)。fromdatetimeimportdatedate。maxdatetime。date(9999,12,31) date。resolution 两个日期对象的最小间隔,timedelta(days1)。fromdatetimeimportdatedate。resolutiondatetime。timedelta(days1) date。year 在MINYEAR和MAXYEAR之间,包含边界。fromdatetimeimportdateddate。today()生成一个date对象ddatetime。date(2021,7,5)d。year2021 date。month 1至12(含)接上述案例d。month7 date。day 返回1到指定年月的天数间的数字。接上述案例d。day5 3、实例方法 date。replace() 作用:返回一个具有同样值的日期,除非通过任何关键字参数给出了某些形参的新值。 用法:date。replace(yearself。year,monthself。month,dayself。day)fromdatetimeimportdateddate(2002,12,31)d。replace(day26)datetime。date(2002,12,26) date。timetuple() 作用:返回一个time。structtime,即time。localtime()所返回的类型。hours,minutes和seconds值均为0,且DST旗标值为1。 用法:date。timetuple(d)ddate(2002,12,31)date。timetuple(d)time。structtime(tmyear2002,tmmon12,tmmday31,tmhour0,tmmin0,tmsec0,tmwday1,tmyday365,tmisdst1) date。toordinal() 作用:返回日期的预期格列高利历序号,其中公元1年1月1日的序号为1。对于任意date对象d,date。fromordinal(d。toordinal())d。ddate(1,1,1)d。toordinal()1ddate(2002,12,31)d。toordinal()731215date。fromordinal(d。toordinal())datetime。date(2002,12,31) date。weekday() 作用:返回一个整数代表星期几,星期一为0,星期天为6。date(2002,12,4)。weekday()2 date。isoweekday() 作用:返回一个整数代表星期几,星期一为1,星期天为7。date(2002,12,4)。isoweekday()3 date。isocalendar() 作用:返回一个由三部分组成的namedtuple对象:year,week和weekday。 ISO历法是一种被广泛使用的格列高利历。ISO年由52或53个完整星期构成,每个星期开始于星期一结束于星期日。一个ISO年的第一个星期就是(格列高利)历法的一年中第一个包含星期四的星期。这被称为1号星期,这个星期四所在的ISO年与其所在的格列高利年相同。 例如,2004年的第一天是星期四,因此ISO2004年的第一个星期开始于2003年12月29日星期一,结束于2004年1月4日星期日。fromdatetimeimportdatedate(2003,12,29)。isocalendar()(2004,1,1)旧版本datetime。IsoCalendarDate(year2004,week1,weekday1)新版本date(2004,1,4)。isocalendar()datetime。IsoCalendarDate(year2004,week1,weekday7) 在3。9版更改:结果由元组改为namedtuple。 date。isoformat() 作用:返回一个以ISO8601格式YYYYMMDD来表示日期的字符串 用法:date。isoformat(d)fromdatetimeimportdatedate(2021,10,1)。isoformat()20211001 这是date。fromisoformat()的逆操作。 date。str() 作用:对于日期对象d,str(d)等价于d。isoformat()。 用法:date。str(d)fromdatetimeimportdatedate(2021,10,1)。str()20211001str(date(2021,10,1))20211001 date。ctime() 作用:返回一个表示日期的字符串,在原生Cctime()函数(time。ctime()会发起调用该函数,但date。ctime()则不会)遵循C标准的平台上。fromdatetimeimportdatedate(2021,10,1)。ctime()FriOct100:00:002021 d。ctime()等效于time。ctime(time。mktime(d。timetuple()))ddate(2021,10,1)importtimetime。ctime(time。mktime(d。timetuple()))FriOct100:00:002021 date。strftime() 作用:翻译下就是strfromtime,将给定格式的日期时间对象转换为字符串。日期时间对象字符串,控制日期时间对象的输出格式,date、datetime、time对象都支持strftime(format)方法,可用来创建由一个显式格式字符串所控制的表示时间的字符串。要获取格式指令的完整列表,查看文末列表。 用法:date。strftime(format) 掌握了这个方法,随心所以的转换日期格式importdatetimedtdatetime。date(2021,10,1)创建一个日期对象dt。strftime(Ymd)20211001dt。strftime(Y年m月d日)2021年10月01日dt。strftime(Ymd)20211001dt。strftime(YmdH:M)2021100100:00dt。strftime(A,d。BYI:Mp)Friday,01。October202112:00AM date。format(format) 与date。strftime()相同。此方法使得为date对象指定以格式化字符串字面值表示的格式化字符串以及使用str。format()进行格式化成为可能。虽然不建议使用这个装逼,但是遇到别人装逼的时候我们得知道。要获取格式指令的完整列表,请看文末附表importdatetimedtdatetime。date(2021,10,1)创建一个日期对象dt。format(Y年m月d日)2021年10月01日 4、支持的运算 date2date1timedelta date2等于从date1减去timedelta。days天。(1) date2date1timedelta 计算date2的值使得date2timedeltadate1。(2) timedeltadate1date2 (3) date1date2 如果date1的时间在date2之前则认为date1小于date2。(4)