python datetime模块详解

之前有讲time模块可以查看之前的笔记https://sulao.cn/post/118.html,datetime模块也有和time模块相同的功能,也有一些自己特有的功能属性,我们来看看吧

datetime模块中包含如下类

date日期对象,常用的属性有year, month, day
time时间对象
datetime日期时间对象,常用的属性有hour, minute, second, microsecond
datetime_CAPI日期时间对象C语言接口
timedelta时间间隔,即两个时间点之间的长度
tzinfo时区信息对象

datetime模块中包含的常量

MAXYEAR返回能表示的最大年份datetime.MAXYEAR9999
MINYEAR返回能表示的最小年份datetime.MINYEAR1

我们首先来看看date函数

print(datetime.date(2016, 1, 5))

date函数需要传递三个参数进去,分别是年year,月month,和日day

上面打印的结果是

2016-01-05

我们可以通过年year,月month,和日day来获取相关的数据

#打印今日日期
print(datetime.date.today())
print(datetime.date.today().year)
print(datetime.date.today().month)
print(datetime.date.today().day)

打印结果是

2016-01-05
2016
1
5

用于日期比较大小的方法

__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__()小于(xx.__lt__(y)
__ne__()不等于(x!=y)x.__ne__(y)

a=datetime.date(2016,1,1)
b=datetime.date(2016,1,5)
a.__eq__(b)
False
a.__ge__(b)
False
a.__gt__(b)
False
a.__le__(b)
True
a.__lt__(b)
True
a.__ne__(b)
True

获得二个日期相差多少天

使用__sub__()和__rsub__()方法,其实二个方法差不太多,一个是正向操作,一个是反向操作:

a=datetime.date(2016, 1, 22)
b=datetime.date(2016, 1, 15)
print(a.__sub__(b).days)
print(a.__rsub__(b).days)

打印结果

7
-7

ISO标准化日期

如果想要让所使用的日期符合ISO标准,那么使用如下三个方法: 

isocalendar()返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7) 

a = datetime.date(2016,1,5)
print(a.isocalendar())
print(a.isocalendar()[0])
print(a.isocalendar()[1])
print(a.isocalendar()[2])

打印结果

(2016, 1, 2)
2016
1
2

isoformat()返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串

a = datetime.date(2016,1,5)
print(a.isoformat())

打印结果

2016-01-05

isoweekday()返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7) 

a = datetime.date(2016,1,5)
print(a.isoweekday())

打印结果

2

与isoweekday()相似的还有一个weekday()方法,只不过是weekday()方法返回的周一为0, 周日为6 

a = datetime.date(2016,1,5)
print(a.weekday())

打印结果

1

timetuple()和time模块下的localtime()方法类似,返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0


a = datetime.date(2016,1,5)
print(a.timetuple())

打印结果

time.struct_time(tm_year=2016, tm_mon=1, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=5, tm_isdst=-1)

toordinal()返回公元公历开始到现在的天数。公元1年1月1日为1

a = datetime.date(2016,1,22)
print(a.toordinal())

打印结果

735985

fromtimestamp()根据给定的时间戮,返回一个ISO标准时间字串

import time
import datetime

time.time()
a = datetime.date.fromtimestamp(time.time())
print(a)

打印结果

2016-01-05

today()返回当前日期

2016-01-05

max:date类能表示的最大的年、月、日的数值

print(datetime.date.max)

打印结果

9999-12-31

min:date类能表示的最小的年、月、日的数值

print(datetime.date.min)

打印结果

0001-01-01

日期的字符串输出,直接上例子吧

a = datetime.date(2016,1,22)
print(a.__format__("%Y-%m-%d"))
print(a.__format__("%Y/%m/%d"))
print(a.__format__("%D"))
#打印结果
2016-01-22
2016/01/22
01/22/16

ctime()等价于time模块的ctime()

a = datetime.date(2016,1,22)
print(a.ctime())

打印结果

Fri Jan 22 00:00:00 2016

python中时间日期格式化符号:

%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(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当前时区的名称
%%%号本身


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/182.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。