datetime
(一)、datetime模块中包含如下类:
| 类名 | 功能说明 |
|---|---|
| date | 日期对象,常用的属性有year, month, day |
| time | 时间对象 |
| datetime | 日期时间对象,常用的属性有hour, minute, second, microsecond |
| datetime_CAPI | 日期时间对象C语言接口 |
| timedelta | 时间间隔,即两个时间点之间的长度 |
| tzinfo | 时区信息对象 |
2.date类
2.1date对象构成
1. date对象由year年份、month月份及day日期三部分构成,如:
#date对象
date(year,month,day)
反问date的属性值
>>> a = datetime.date.today()
>>> a
datetime.date(2017, 3, 22)
>>> a.year
2017
>>> a.month
3
>>> a.day
22
?
或者
>>> a.__getattribute__('year')
2017
>>> a.__getattribute__('month')
3
>>> a.__getattribute__('day')
22
2.2 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__(...)方法,返回结果为datetime.timedelta类型:
方法名 方法说明 用法
__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)
3.ISO标准化日期
3.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
3.2 isoformat (...)
返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串;
举例:
>>> a = datetime.date(2017,3,22)
>>> a.isoformat()
'2017-03-22'
3.3 isoweekday(...)
返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)
举例:
>>> a = datetime.date(2017,3,22)
>>> a.isoweekday()
3
3.4 weekday(...)
返回符合ISO标准的指定日期所在的星期数(周一为0…周日为6)
举例:
>>> a = datetime.date(2017,3,22)
>>> a.weekday()
2
4.其他方法与属性
4.1 timetuple(...)
返回一个类型为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
4.2 fromtimestamp(...)
根据给定的时间戮,返回一个date对象
>>> time.time()
1490165087.2242179
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2017, 3, 22)
4.3 today(...) 返回当前日期
>>> datetime.date.today()
datetime.date(2022, 3, 22)
2.3.日期的格式化字符串输出
>>> 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'
>>> a.__str__()
'2017-03-22'
>>> a.ctime()
'Wed Mar 22 00:00:00 2017'
3.time类
3.1time对象构成
time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成
如:
from datetime import time time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
具体举例:
>>> 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
或者
>>> a.__getattribute__('hour')
12
>>> a.__getattribute__('minute')
20
>>> a.__getattribute__('second')
59
3.2. time类中的方法和属性
1.比较时间大小
这里的方法与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.3.时间的字符串输出
1、使用format(...)方法以指定格式进行时间输出:
>>> a = datetime.time(12,20,59,899)
>>> a.__format__('%H:%M:%S')
'12:20:59'
或者
>>> a.strftime('%H:%M:%S')
'12:20:59'
2、ISO标准输出
>>> a = datetime.time(12,20,59,899) >>> a.isoformat() '12:20:59.000899'
3._ str _()
>>> a = datetime.time(12,20,59,899) >>> a.__str__() '12:20:59.000899'
4.datetime类
4.1datetime类的数据构成
datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
4.2datetime的方法和属性
1.date(…):返回
>>> a = datetime.datetime.now() >>> a datetime.datetime(2017, 3, 22, 16, 9, 33, 494248) >>> a.date() datetime.date(2017, 3, 22)
2.time(…):返回datetime对象的时间部分
>>> a = datetime.datetime.now() >>> a datetime.datetime(2017, 3, 22, 16, 9, 33, 494248) >>> a.time() datetime.time(16, 9, 33, 494248)
3.utctimetuple(…):返回UTC时间元组
>>> a = datetime.datetime.now() >>> a datetime.datetime(2017, 3, 22, 16, 9, 33, 494248) >>> a.utctimetuple() time.struct_time(tm_year=2017, tm_mon=3, tm_mday=22, tm_hour=16, tm_min=9, tm_sec=33, tm_wday=2, tm_yday=81, tm_isdst=0)
4.combine(…) 合并date和time对象
将一个date对象和一个time对象合并生成一个datetime对象
>>> a = datetime.datetime.now() >>> a datetime.datetime(2017, 3, 22, 16, 9, 33, 494248) >>>datetime.datetime.combine(a.date(),a.time()) datetime.datetime(2017, 3, 22, 16, 9, 33, 494248)
5.now(…):返回当前日期时间的datetime对象
>>> a = datetime.datetime.now() >>> a datetime.datetime(2017, 3, 22, 16, 9, 33, )
6.utcnow(…):返回当前日期时间的UTC datetime对象
>>> a = datetime.datetime.utcnow() >>> a datetime.datetime(2017, 3, 22, 8, 26, 54, 935242)
7.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)
8.utcfromtimestamp(…):UTC时间戳的datetime对象,时间戳值为time.time()
>>> datetime.datetime.utcfromtimestamp(time.time()) datetime.datetime(2017, 3, 22, 8, 29, 7, 654272)
5.timedelta类
5.1timedelta 用处及属性
timedelta类是用来计算二个datetime对象的差值的。 此类中包含如下属性: 1、days:天数 2、microseconds:微秒数(>=0 并且 <1秒) 3、seconds:秒数(>=0 并且 <1天)
6.日期计算实操
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)
5.计算上周一和周日的日期
today = datetime.date.today() >>> today datetime.date(2017, 3, 23) >>> today_weekday = today.isoweekday() >>> last_sunday = today - datetime.timedelta(days=today_weekday) >>> last_monday = last_sunday - datetime.timedelta(days=6) >>> last_sunday datetime.date(2017, 3, 19) >>> last_monday datetime.date(2017, 3, 13)
6.计算指定日期当月最后一天的日期和本月天数
>>> date = datetime.date(2017,12,20) >>> def eomonth(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) ... return next_month_first_date - datetime.timedelta(1) ... >>> eomonth(date) datetime.date(2017, 12, 31) >>> eomonth(date).day 31
7.计算指定日期下个月当天的日期
这里要调用上一项中的函数eomonth(...)
>>> date = datetime.date(2017,12,20) >>> def edate(date_object): ... if date_object.month == 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 > eomonth(last_month_first_day).day: ... next_month_date = datetime.date(date_object.year,date_object.month+1,eomonth(last_month_first_day).day) ... else: ... next_month_date = datetime.date(date_object.year, date_object.month+1, date_object.day) ... return next_month_date ... >>> edate(date) datetime.date(2018, 1, 20)
8.获得本周一至今天的时间段并获得上周对应同一时间段
>>> today = datetime.date.today() >>> this_monday = today - datetime.timedelta(today.isoweekday()-1) >>> last_monday = this_monday - datetime.timedelta(7) >>> last_weekday = today -datetime.timedelta(7) >>> this_monday datetime.date(2017, 3, 20) >>> today datetime.date(2017, 3, 23) >>> last_monday datetime.date(2017, 3, 13) >>> last_weekday datetime.date(2017, 3, 16)
7.python中时间日期格式化符号
| 符号 | 说明 |
|---|---|
%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 |
当前时区的名称 |
%% |
%号本身 |