参考网址
blog.csdn.net/u011250186/…
总结
datetime模块是一个很常用的模块,关于日期,时间。
日期时间的加减
0/datetime模块介绍
<1>datetime模块中包含的类
datetime模块中有很多类class,这些类是小写的。
类名 | 功能说明 |
|
| date | 日期对象,常用的属性有year, month, day |
| time | 时间对象,常用的属性有hour,minute,second,microsecond |
| datetime | 日期时间对象,常用的属性有year, month, day, hour, minute, second, microsecond |
| datetime_CAPI | 日期时间对象C语言接口 |
| timedelta | 时间间隔,即两个时间点之间的长度 |
| tzinfo | 时区信息对象
<2>datetime模块中包含的常量
| 常量 | 功能说明 | 用法 | 返回值 |
|
| MAXYEAR | 返回能表示的最大年份 | datetime.MAXYEAR | 9999 |
| MINYEAR | 返回能表示的最小年份 | datetime.MINYEAR | 1
1/datetime中的date类
<1>date对象的构成
date对象由year年份、month月份及day日期三部分构成: date(year,month,day)
通过year, month, day三个数据描述符可以进行访问:
>>> import datetime
>>> a = datetime.date.today()
>>> a
datetime.date(2017, 3, 22)
>>> a.year
2017
>>> a.month
3
>>> a.day
22
当然,你也可以用__getattribute__(...)方法获得上述值:
>>> a.__getattribute__('year')
2017
>>> a.__getattribute__('month')
3
>>> a.__getattribute__('day')
22
<2>date对象中包含的方法与属性
用于日期之间比较大小的方法
| 方法名 | 方法说明 | 用法 |
| --------- | ---------- | ----------- |
| __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
>>> import datetime
>>> 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
<3>获得二个日期之间相差多少天
使用__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
2/datetime中的time类
<1>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
<2>time类中的方法和属性
与date类一样,time类也包含__getattribute__(...)方法可以读取相关属性:
>>> a.__getattribute__('hour')
12
>>> a.__getattribute__('minute')
20
>>> a.__getattribute__('second')
59
相关方法括:
`__eq__(...)`,
`__ge__(...)`,
`__gt__(...)`,
`__le__(...)`,
`__lt__(...)`,
`__ne__(...)`
这里的方法与date类中定义的方法大同小异,使用方法与一样,这里就不过多介绍了,示例如下:
>>> import datetime
>>> 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
<3>其他属性
时间的字符串输出
如果你想将时间对象转化为字符串对象的话,可以用到`__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'
如果只是想简单的获得时间的字符串,则使用__str__(...)
>>> a = datetime.time(12,20,59,899)
>>> a.__str__()
'12:20:59.000899'
3/datetime中datetime类
这里可以看出来,模块名和类名,一样。
datetime类,有年,月,日,时,分,秒,毫秒这几个属性。
所以说,如果你得到一个datetime类的实例化对象,这个对象中,都有年,月,日,时,分,秒,毫秒这几个属性
datetime类的对象构成
datetime类其实是可以看做是date类和time类的合体
其大部分的方法和属性都继承于这二个类
其数据对象构成也是由这二个类所有的属性所组成的
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
专属于datetime的方法和属性
date(…):返回datetime对象的日期部分:
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2017, 3, 22, 16, 9, 33, 494248)
>>> a.date()
datetime.date(2017, 3, 22)
time(…) :返回datetime对象的时间部分:
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2017, 3, 22, 16, 9, 33, 494248)
>>> a.time()
datetime.time(16, 9, 33, 494248)
now(…):返回当前日期时间的datetime对象:
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2017, 3, 22, 16, 9, 33,
strftime(): 日期时间类型-->字符串
from datetime import date, timedelta
yesterday = (date.today() + timedelta(days=-1)).strftime('%Y-%m-%d')
print(yesterday)
strptime(…):根据string, format 2个参数,返回一个对应的datetime对象:
>>> datetime.datetime.strptime('2017-3-22 15:25', '%Y-%m-%d %H:%M')
datetime.datetime(2017, 3, 22, 15, 25)
4/timedelta类
`timedelta`类是用来计算二个`datetime`对象的差值的。
此类中包含如下属性:
1、`days`**:天数
2、`seconds`**:秒数(>=0 并且 <1天)
3、`microseconds`**:微秒数(>=0 并且 <1秒)
日期计算实操
1.获取当前日期时间
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2017, 3, 22, 16, 55, 49, 148233)
>>> today = datetime.date.today()
>>> today
datetime.date(2017, 3, 22)
>>> now.date()
datetime.date(2017, 3, 22)
>>> now.time()
datetime.time(16, 55, 49, 148233)
2.获取上个月第一天和最后一天的日期
>>> today = datetime.date.today()
>>> today
datetime.date(2017, 3, 22)
>>> mlast_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1)
>>> mlast_day
datetime.date(2017, 2, 28)
>>> mfirst_day = datetime.date(mlast_day.year, mlast_day.month, 1)
>>> mfirst_day
datetime.date(2017, 2, 1)
3/获取时间差
时间差单位为秒
>>> start_time = datetime.datetime.now()
>>> end_time = datetime.datetime.now()
>>> (end_time - start_time).seconds
7
差值不只是可以查看相差多少秒,还可以查看天(days), 秒(seconds), 微秒(microseconds).
4.计算当前时间向后8个小时的时间
>>> d1 = datetime.datetime.now()
>>> d2 = d1 + datetime.timedelta(hours=+8)
>>> d2
datetime.datetime(2017, 3, 23, 1, 10, 37, 182240)
可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds).
5/日期时间格式符号
| 符号 | 说明 |
| ---- | ----------------------- |
| `%y` | 两位数的年份表示(00-99) |
| `%Y` | 四位数的年份表示(000-9999) |
| `%m` | 月份(01-12) |
| `%d` | 月内中的一天(0-31) |
| `%H` | 24小时制小时数(0-23) |
| `%I` | 12小时制小时数(01-12) |
| `%M` | 分钟数(00=59) |
| `%S` | 秒(00-59) |
| `%a` | 本地简化星期名称 |
| `%A` | 本地完整星期名称 |
| `%b` | 本地简化的月份名称 |
| `%B` | 本地完整的月份名称 |
| `%c` | 本地相应的日期表示和时间表示 |
| `%j` | 年内的一天(001-366) |
| `%p` | 本地A.M.或P.M.的等价符 |
| `%U` | 一年中的星期数(00-53)星期天为星期的开始 |
| `%w` | 星期(0-6),星期天为星期的开始 |
| `%W` | 一年中的星期数(00-53)星期一为星期的开始 |
| `%x` | 本地相应的日期表示 |
| `%X` | 本地相应的时间表示 |
| `%Z` | 当前时区的名称 |
| `%%` | %号本身