Python⽇期时间模块datetime详解与Python⽇期时间的⽐
较,计算实例代码
python中的datetime模块提供了操作⽇期和时间功能,该模块提供了五种核⼼对象:datetime时间⽇期类型,date⽇期类型,time时间类型,tzinfo时区类型,timedelta时间差类型,今天为⼤家介绍⼀下datetime模块的具体使⽤⽅法与python⽇期时间计算与⽐较的相关实例
⼀、Python中⽇期时间模块datetime介绍
(⼀)、datetime模块中包含如下类:
类名功能说明
date⽇期对象,常⽤的属性有year, month, day
time时间对象
datetime⽇期时间对象,常⽤的属性有hour, minute, second, microsecond
datetime_CAPI⽇期时间对象C语⾔接⼝
timedelta时间间隔,即两个时间点之间的长度
tzinfo时区信息对象
(⼆)、datetime模块中包含的常量
常量功能说明⽤法返回值MAXYEAR返回能表⽰的最⼤年份datetime.MAXYEAR9999 MINYEAR返回能表⽰的最⼩年份datetime.MINYEAR1
⼆、date类
(⼀)、date对象构成
1、date对象由year年份、month⽉份及day⽇期三部分构成:
date(year,month,day)
2、通过year, month, day三个数据描述符可以进⾏访问:
>>> a = day()
>>> a
datetime.date(2017, 3, 22)
>>> a.year
2017
>>> a.month
3
>>> a.day
22
3、当然,你也可以⽤__getattribute__(...)⽅法获得上述值:
>>> a.__getattribute__('year')
2017
>>> a.__getattribute__('month')
3
>>> a.__getattribute__('day')
22
(⼆)、date对象中包含的⽅法与属性
1、⽤于⽇期⽐较⼤⼩的⽅法
⽅法名⽅法说明⽤法
__eq__(…)等于(x==y)x.__eq__(y)
__ge__(…)⼤于等于(x>=y)x.__ge__(y)
__gt__(…)⼤于(x>y)x.__gt__(y)
⽅法名⽅法说明⽤法
__le__(…)⼩于等于(x<=y)x.__le__(y)
__lt__(…)⼩于(x x.__lt__(y)
__ne__(…)不等于(x!=y)x.__ne__(y)
以上⽅法的返回值为True\False
⽰例如下:
>>> a=datetime.date(2017,3,1)
>>> b=datetime.date(2017,3,15)
>>> a.__eq__(b)
False
>>> a.__ge__(b)
False
>>> a.__gt__(b)
False
>>> a.__le__(b)
True
>>> a.__lt__(b)
True
>>> a.__ne__(b)
True
2、获得⼆个⽇期相差多少天
使⽤__sub__(...)和__rsub__(...)⽅法,其实⼆个⽅法差不太多,⼀个是正向操作,⼀个是反向操作:
⽅法名⽅法说明⽤法
__sub__(…)x - y x.__sub__(y)
__rsub__(…)y - x x.__rsub__(y)
⽰例如下:
>>> a
datetime.date(2017, 3, 22)
>>> b
datetime.date(2017, 3, 15)
>>> a.__sub__(b)
datetime.timedelta(7)
>>> a.__rsub__(b)
datetime.timedelta(-7)
计算结果的返回值类型为datetime.timedelta, 如果获得整数类型的结果则按下⾯的⽅法操作:
>>> a.__sub__(b).days
7
>>> a.__rsub__(b).days
-7
3、ISO标准化⽇期
如果想要让所使⽤的⽇期符合ISO标准,那么使⽤如下三个⽅法:
1).* isocalendar(...)*:返回⼀个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周⼀为1…周⽇为7):
⽰例如下
>>> a = datetime.date(2017,3,22)
>>> a.isocalendar()
(2017, 12, 3)
>>> a.isocalendar()[0]
2017
>>> a.isocalendar()[1]
12
>>> a.isocalendar()[2]
3
2). isoformat(...): 返回符合ISO 8601标准 (YYYY-MM-DD) 的⽇期字符串;
⽰例如下
>>> a = datetime.date(2017,3,22)
>>> a.isoformat()
'2017-03-22'
3). isoweekday(...): 返回符合ISO标准的指定⽇期所在的星期数(周⼀为1…周⽇为7)
⽰例如下:
>>> a = datetime.date(2017,3,22)
>>> a.isoweekday()
3
4).与isoweekday(...)相似的还有⼀个weekday(...)⽅法,只不过是weekday(...)⽅法返回的周⼀为 0, 周⽇为 6
⽰例如下:
>>> a = datetime.date(2017,3,22)
>>> a.weekday()
2
4、其他⽅法与属性
1). timetuple(...):该⽅法为了兼容time.localtime(...)返回⼀个类型为time.struct_time的数组,但有关时间的部分元素值为0:
>>> a = datetime.date(2017,3,22)
>>> a.timetuple()
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=81, tm_isdst=-1)
>>> a.timetuple().tm_year
2017
>>> a.timetuple().tm_mon
3
>>> a.timetuple().tm_mday
22
2).toordinal(...):返回公元公历开始到现在的天数。公元1年1⽉1⽇为1
>>> a = datetime.date(2017,3,22)
>>> a.toordinal()
736410
3). replace(...):返回⼀个替换指定⽇期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产⽣新对象,不影响原date对象。
>>> a = datetime.date(2017,3,22)
>>> b = a.replace(2017,2,28)
>>> a
datetime.date(2017, 3, 22)
>>> b
datetime.date(2017, 2, 28)
4).resolution:date对象表⽰⽇期的最⼩单位。这⾥是天。
>>> solution
datetime.timedelta(1)
5).fromordinal(...):将Gregorian⽇历时间转换为date对象;Gregorian Calendar :⼀种⽇历表⽰⽅法,类似于我国的农历,西⽅国家使⽤⽐较多。
>>> a = datetime.date(2017,3,22)
>>> b = a.toordinal()
>>> datetime.date.fromordinal(b)
datetime.date(2017, 3, 22)
6).fromtimestamp(...):根据给定的时间戮,返回⼀个date对象
>>> time.time()
1490165087.2242179
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2017, 3, 22)
7).today(...):返回当前⽇期
>>> day()
datetime.date(2017, 3, 22)
8).max: date类能表⽰的最⼤的年、⽉、⽇的数值
>>> datetime.date.max
datetime.date(9999, 12, 31)
9).min: date类能表⽰的最⼩的年、⽉、⽇的数值
>>> datetime.date.min
datetime.date(1, 1, 1)
(三)、⽇期的字符串输出
1、如果你想将⽇期对象转化为字符串对象的话,可以⽤到__format__(...)⽅法以指定格式进⾏⽇期输出:>>> a = datetime.date(2017,3,22)
>>> a.__format__('%Y-%m-%d')
'2017-03-22'
>>> a.__format__('%Y/%m/%d')
'2017/03/22'
>>> a.__format__('%y/%m/%d')
'17/03/22'
>>> a.__format__('%D')
'03/22/17'
与此⽅法等价的⽅法为strftime(...)
>>> a.strftime("%Y%m%d")
'20170322'
关于格式化字符串的相关内容,请查阅本⽂最后的:附录:python中时间⽇期格式化符号
2、如果只是相简单的获得⽇期的字符串,则使⽤__str__(...)
>>> a.__str__()
'2017-03-22'
3、如果想要获得ctime样式的格式请使⽤ctime(...):
>>> a.ctime()
'Wed Mar 22 00:00:00 2017'
三、time类
(⼀)、time类的数据构成
time类由hour⼩时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
相应的,time类中就有上述五个变量来存储应该的值:
>>> a = datetime.time(12,20,59,899)
>>> a
datetime.time(12, 20, 59, 899)
>>> a.hour
12
>>> a.minute
20
>>> a.second
59
>>> a.microsecond
899
>>> a.tzinfo
与date类⼀样,time类也包含__getattribute__(...)⽅法可以读取相关属性:
>>> a.__getattribute__('hour')
getattribute方法返回类型12
>>> a.__getattribute__('minute')
20
>>> a.__getattribute__('second')
59
(⼆)、time类中的⽅法和属性
1、python⽐较时间⼤⼩
相关⽅法包括:__eq__(...), __ge__(...), __gt__(...), __le__(...), __lt__(...),__ne__(...)
这⾥的⽅法与date类中定义的⽅法⼤同⼩异,使⽤⽅法与⼀样,这⾥就不过多介绍了,⽰例如下:>>> a = datetime.time(12,20,59,899)
>>> b = datetime.time(11,20,59,889)
>>> a.__eq__(b)
False
>>> a.__ne__(b)
True
>>> a.__ge__(b)
True
>>> a.__gt__(b)
True
>>> a.__le__(b)
False
>>> a.__lt__(b)
False
2、__nonzero__(...)
判断时间对象是否⾮零,返回值为True/False:
>>> a = datetime.time(12,20,59,899)
>>> a.__nonzero__()
True
3、其他属性
1)、max:最⼤的时间表⽰数值:
>>> datetime.time.max
datetime.time(23, 59, 59, 999999)
2)、min:最⼩的时间表⽰数值
>>> datetime.time.min
datetime.time(0, 0)
3)、resolution:时间间隔单位为分钟
>>> solution
datetime.timedelta(0, 0, 1)
(三)、时间的字符串输出
1、如果你想将时间对象转化为字符串对象的话,可以⽤到__format__(...)⽅法以指定格式进⾏时间输出:>>> a = datetime.time(12,20,59,899)
>>> a.__format__('%H:%M:%S')
'12:20:59'
与此⽅法等价的⽅法为strftime(...)
>>> a = datetime.time(12,20,59,899)
>>> a.strftime('%H:%M:%S')
'12:20:59'
关于格式化字符串的相关内容,请查阅本⽂最后的:附录:python中时间⽇期格式化符号
2、ISO标准输出
如果要使输出的时间字符符合ISO标准,请使⽤isoformat(...):
>>> a = datetime.time(12,20,59,899)
>>> a.isoformat()
'12:20:59.000899'
3、如果只是相简单的获得时间的字符串,则使⽤__str__(...)
>>> a = datetime.time(12,20,59,899)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。