常用模块 - datetime模块
一、简介
datetime是Python处理日期和时间的标准库。
1、datetime模块中常用的类:
| 
 类名  | 
 功能说明  | 
| 
 date  | 
 日期对象,常用的属性有year, month, day  | 
| 
 time  | 
 时间对象  | 
| 
 datetime  | 
 日期时间对象,常用的属性有hour, minute, second  | 
2、datetime模块中包含的常量
| 
 常量  | 
 功能说明  | 
 用法  | 
 返回值  | 
| 
 MAXYEAR  | 
 返回能表示的最大年份  | 
 datetime.MAXYEAR  | 
 9999  | 
| 
 MINYEAR  | 
 返回能表示的最小年份  | 
 datetime.MINYEAR  | 
 1  | 
二、date类
(一)、date对象构成
1、date对象由year年份、month月份及day日期三部分构成:
>>> datetime.date(2018, 5, 1)
datetime.date(2018, 5, 1)
2、通过year, month, day三个数据描述符可以进行访问:
>>> date_today = datetime.date.today()
>>> date_today
datetime.date(2018, 4, 25)
>>> date_today.year
2018
>>> date_today.month
4
>>> date_today.day
25
>>>
3、也可以用__getattribute__()方法获得上年、月、日的值:
>>> date_today.__getattribute__("year")
2018
>>> date_today.__getattribute__("month")
4
>>> date_today.__getattribute__("day")
25
>>>
(二)、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<y)  | 
 x.__lt__()  | 
| 
 __ne__()  | 
 是否不等于(x!=y)  | 
 x.__ne__(y)  | 
注:以上方法的返回值为True或者False
示例代码如下:
>>> a = datetime.date(2018, 4, 25)
>>> b = datetime.date(2018, 5, 1)
>>> 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(2018, 4, 25)
>>> b = datetime.date(2018, 5, 1)
>>> a.__sub__(b)
datetime.timedelta(-6)
>>> a.__rsub__(b)
datetime.timedelta(6)
>>>
计算结果的返回值类型为datetime.timedelta,如果想获得整数类型的结果,其操作如下:
>>> a.__sub__(b).days
-6
>>> a.__rsub__(b).days
6
>>>
3、ISO标准化日期
如果想要让所使用的日期符合ISO标准,那么使用如下四个方法:
1)、isocalendar():返回一个包含三个值的元组,三个值依次为year年份、week number周数、weekday星期数(周一为1…周日为7)
示例代码如下:
>>> date_today = datetime.date.today()
>>> date_today.isocalendar()
(2018, 17, 3)
>>> date_today.isocalendar()[0]
2018
>>> date_today.isocalendar()[1]
17
>>> date_today.isocalendar()[2]
3
>>>
2)、isoformat():返回符合ISO标准(YYYY-MM-DD)的日期字符串
示例代码如下:
>>> date_today = datetime.date.today()
>>> date_today.isoformat()
'2018-04-25'
>>>
3)、isoweekday():返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)
示例代码如下:
>>> date_today = datetime.date.today()
>>> date_today.isoweekday()
3
>>>
4)、weekday():与isoweekday()相似,只不过是weekday()方法返回的是周一为0,周日为6
示例代码如下:
>>> date_today = datetime.date.today()
>>> date_today.weekday()
2
>>>
4、其他方法与属性
1)、timetuple():该方法为了兼容time.localtime()返回一个类型为time.struct_time的数组,但跟时间相关的部分元素值为0
>>> date_today = datetime.date.today()
>>> date_today.timetuple()
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=115, tm_isdst=-1)
>>> date_today.timetuple().tm_year
2018
>>> date_today.timetuple().tm_mon
4
>>> date_today.timetuple().tm_mday
25
>>>
2)、toordinal():返回公元公历开始到现在的天数。公元1年1月1日为1
>>> date_today = datetime.date.today()
>>> date_today.toordinal()
736809
>>>
3)、replace():返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year, month, day。需注意替换是产生新对象,不会影响原date对象
>>> date_today = datetime.date.today()
>>> date_today
datetime.date(2018, 4, 25)
>>> new_date = date_today.replace(2017)
>>> new_date
datetime.date(2017, 4, 25)
>>> date_today
datetime.date(2018, 4, 25)
>>> new_date = date_today.replace(2016, 5, 1)
>>> new_date
datetime.date(2016, 5, 1)
>>> date_today
datetime.date(2018, 4, 25)
>>>
4)、resolution:date对象表示日期的最小单位。这里是天
>>> datetime.date.resolution
datetime.timedelta(1)
>>>
5)、fromordinal():将整型数字(从公元公历开始的天数)转换成date对象
>>> date_for_int = date_today.fromordinal(736809)
>>> date_for_int
datetime.date(2018, 4, 25)
6)、fromtimestamp():根据给定的时间戳,返回一个date对象
>>> time.time()
1524625600.0626569
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2018, 4, 25)
>>>
7)、today():返回当前日期
>>> datetime.date.today()
datetime.date(2018, 4, 25)
>>>
8)、max:date类能表示的最大年、月、日的数值
>>> datetime.date.max
datetime.date(9999, 12, 31)
>>>
9)、min:date类能表示的最小的年、月、日的数值
>>> datetime.date.min
datetime.date(1, 1, 1)
>>>
(三)、日期的字符串输出
1、__format__():将日期对象转化为指定格式的字符串
>>> date_today = datetime.date.today()
>>> date_today.__format__("%Y-%m-%d")
'2018-04-25'
>>> date_today.__format__("%Y/%m/%d")
'2018/04/25'
>>> date_today.__format__("%y/%m/%d")
'18/04/25'
>>> date_today.__format__("%D")
'04/25/18'
>>>
与此方法等价的方法为strftime()
>>> date_today = datetime.date.today()
>>> date_today.strftime("%Y-%m-%d")
'2018-04-25'
>>> date_today.strftime("%Y/%m/%d")
'2018/04/25'
>>> date_today.strftime("%y/%m/%d")
'18/04/25'
>>> date_today.strftime("%D")
'04/25/18'
>>>
关于时间日期格式化符号见文末的时间日期格式化符号表。
2、__str__():简单的获得日期的字符串
>>> date_today = datetime.date.today()
>>> date_today.__str__()
'2018-04-25'
>>>
3、ctime():获得ctime样式的格式
>>> date_today = datetime.date.today()
>>> date_today.ctime()
'Wed Apr 25 00:00:00 2018'
>>>
三、time类
(一)、time类的数据构成
time类由hour小时、minute分钟、second秒钟、microsecond毫秒和tzinfo时区五部分组成
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
相应的,time类中就有上述五个变量来存储对应的值:
>>> temp_time = datetime.time(13, 54, 43, 801)
>>> temp_time
datetime.time(13, 54, 43, 801)
>>> temp_time.hour
13
>>> temp_time.minute
54
>>> temp_time.second
43
>>> temp_time.microsecond
801
>>> temp_time.tzinfo
>>>
与date类一样,time类也包含__getattribute__()方法可以读取相应属性:
>>> temp_time = datetime.time(13, 54, 43, 801)
>>> temp_time.__getattribute__('hour')
13
>>> temp_time.__getattribute__('minute')
54
>>> temp_time.__getattribute__('second')
43
>>> temp_time.__getattribute__('microsecond')
801
>>> temp_time.__getattribute__('tzinfo')
>>>
(二)、time类中的方法和属性
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<y)  | 
 x.__lt__()  | 
| 
 __ne__()  | 
 是否不等于(x!=y)  | 
 x.__ne__(y)  | 
注:以上方法的返回值为True或者False
示例代码如下:
>>> a = datetime.time(12, 20, 59, 899)
>>> b = datetime.time(11, 20, 59, 899)
>>> a.__eq__(b)
False
>>> a.__ge__(b)
True
>>> a.__gt__(b)
True
>>> a.__le__(b)
False
>>> a.__lt__(b)
False
>>> a.__ne__(b)
True
>>>
2、其他属性
1)、max:最大的时间表示数值:
>>> datetime.time.max
datetime.time(23, 59, 59, 999999)
>>>
2)、min:最小的时间表示数值:
>>> datetime.time.min
datetime.time(0, 0)
>>>
(三)、时间的字符串输出
1、__format__():将日期对象转化为指定格式的字符串
>>> temp_time = datetime.time(12, 20, 59, 899)
>>> temp_time
datetime.time(12, 20, 59, 899)
>>> temp_time.__format__("%H:%M:%S")
'12:20:59'
>>>
与此方法等价的方法为strftime()方法
>>> temp_time = datetime.time(12, 20, 59, 899)
>>> temp_time
datetime.time(12, 20, 59, 899)
>>> temp_time.strftime("%H:%M:%S")
'12:20:59'
>>>
关于时间日期格式化符号见文末的时间日期格式化符号表。
2、__str__():简单的获得日期的字符串
>>> temp_time = datetime.time(12, 20, 59, 899)
>>> temp_time
datetime.time(12, 20, 59, 899)
>>> temp_time.__str__()
'12:20:59.000899'
>>>
3、ifoformat():ISO标准输出
>>> temp_time = datetime.time(12, 20, 59, 899)
>>> temp_time
datetime.time(12, 20, 59, 899)
>>> temp_time.isoformat()
'12:20:59.000899'
>>>
四、datetime类
(一)、datetime类的数据构成
datetime类可以看做是date类和time类的结合体,其大部分的方法和属性都继承于这两个类,相关的方法可以参考date类和time类。其数据构成也是由这两个类所有的属性所组成的。
datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])
(二)、datetime的专属方法和属性(date类和time类所没有的)
1、date():返回datetime对象的日期部分
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 25, 14, 31, 57, 555633)
>>> datetime_now.date()
datetime.date(2018, 4, 25)
>>>
2、time():返回datetime对象的时间部分
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
>>> datetime_now.time()
datetime.time(14, 33, 5, 444498)
>>>
3、utctimetuple():返回UTC时间元组
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
>>> datetime_now.utctimetuple()
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=25, tm_hour=14, tm_min=33, tm_sec=5, tm_wday=2, tm_yday=115, tm_isdst=0)
>>>
4、combine():将一个date对象和一个time对象合并生成一个datetime对象
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
>>> datetime.datetime.combine(datetime_now.date(), datetime_now.time())
datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
>>>
5、now():返回当前日期时间的datetime对象
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 25, 14, 33, 5, 444498)
6、utcnow():返回当前日期时间的UTC datetime对象
>>> datetime_now = datetime.datetime.utcnow()
>>> datetime_now
datetime.datetime(2018, 4, 25, 6, 37, 47, 665777)
>>>
7、strptime():根据string, format两个参数,返回一个对应的datetime对象
>>> datetime.datetime.strptime("2018-4-25 14:33", "%Y-%m-%d %H:%M")
datetime.datetime(2018, 4, 25, 14, 33)
>>>
8、utcfromtimestamp():UTC时间戳的datetime对象
>>> datetime.datetime.utcfromtimestamp(time.time())
datetime.datetime(2018, 4, 25, 6, 41, 31, 888988)
>>>
五、timedelta类
timedelta类是用来计算两个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0并且<1秒)
3、seconds:秒数(>=0并且<1天)
六、日期计算实例
1、获取当前日期时间:
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 25, 14, 45, 59, 239506)
>>> date_today = datetime.date.today()
>>> date_today
datetime.date(2018, 4, 25)
>>> datetime_now.date()
datetime.date(2018, 4, 25)
>>> datetime_now.time()
datetime.time(14, 45, 59, 239506)
>>>
2、获取上个月第一天和最后一天的日期:
>>> date_today = datetime.date.today()
>>> date_today
datetime.date(2018, 4, 25)
>>> mlast_day = datetime.date(date_today.year, date_today.month, 1) - datetime.timedelta(1)
>>> mlast_day
datetime.date(2018, 3, 31)
>>> mfirst_day = datetime.date(mlast_day.year, mlast_day.month, 1)
>>> mfirst_day
datetime.date(2018, 3, 1)
>>>
3、获取时间差:
>>> start_time = datetime.datetime.now()
>>> end_time = datetime.datetime.now()
>>> (end_time - start_time).seconds
10
>>>
>>> (end_time - start_time).days
0
>>> (end_time - start_time).microseconds
22076
>>>
4、计算当前时间向后8个小时的时间:
>>> datetime1 = datetime.datetime.now()
>>> datetime2 = datetime1 + datetime.timedelta(hours = 8)
>>> datetime1
datetime.datetime(2018, 4, 25, 14, 55, 41, 598834)
>>> datetime2
datetime.datetime(2018, 4, 25, 22, 55, 41, 598834)
>>>
timedelta的参数可以有:days(天)、hours(小时)、minutes(分钟)、seconds(秒钟)、microseconds(微秒)
5、计算上周一和周日的日期:
>>> date_today = datetime.date.today()
>>> date_today
datetime.date(2018, 4, 25)
>>> today_weekday = date_today.isoweekday()
>>> today_weekday
3
>>> last_sunday = date_today - datetime.timedelta(days = today_weekday)
>>> last_sunday
datetime.date(2018, 4, 22)
>>> last_monday = last_sunday - datetime.timedelta(days = 6)
>>> last_monday
datetime.date(2018, 4, 16)
>>>
6、计算指定日期当月最后一天的日期和当月的天数:
>>> temp_date = datetime.date(2018, 4, 25)
>>> def eomonth(date_obj):
... if date_obj.month == 12:
... next_month_first_date = datetime.date(date_obj.year + 1, 1, 1)
... else:
... next_month_first_date = datetime.date(date_obj.year, date_obj.month + 1, 1)
... return next_month_first_date - datetime.timedelta(1)
...
>>> eomonth(temp_date)
datetime.date(2018, 4, 30)
>>> eomonth(temp_date).day
30
>>>
7、计算指定日期下个月当天的日期:
>>> temp_date = datetime.date(2018, 4, 25)
>>> def edate(date_obj):
... if date_obj.month == 12:
... next_month_date = datetime.date(date_obj.year + 1, 1, date_obj.day)
... else:
... next_month_first_day = datetime.date(date_obj.year, date_obj.month + 1, 1)
... if date_obj.day > eomonth(next_month_first_day).day:
... next_month_date = datetime.date(date_obj.year, date_obj.month + 1, eomonth(next_month_first_day).day)
... else:
... next_month_date = datetime.date(date_obj.year, date_obj.month +1, date_obj.day)
... return next_month_date
...
>>> edate(temp_date)
datetime.date(2018, 5, 25)
>>>
注:这里调用了上一个事例中的eomonth()函数。
8、获得本周一至今天的时间段并获得上周对应的时间段:
>>> temp_today = datetime.date.today()
>>> temp_today
datetime.date(2018, 4, 25)
>>> this_monday = temp_today - datetime.timedelta(temp_today.isoweekday() - 1)
>>> this_monday
datetime.date(2018, 4, 23)
>>> last_weekday = temp_today - datetime.timedelta(7)
>>> last_weekday
datetime.date(2018, 4, 18)
>>> last_monday = this_monday - datetime.timedelta(7)
>>> last_monday
datetime.date(2018, 4, 16)
>>>
附录:Python中时间日期格式化符号对应表
| 
 符号  | 
 说明  | 
| 
 %y  | 
 两位数的年份(00-99)  | 
| 
 %Y  | 
 四位数的年份表示(0001-9999)  | 
| 
 %m  | 
 两位数的月份(01-12)  | 
| 
 %d  | 
 两位数的天数(01-31)  | 
| 
 %H  | 
 24小时制小时数(0-23)  | 
| 
 %I  | 
 12小时制小时数(1-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),0表示周日  | 
| 
 %W  | 
 一年中的第几周(00-53),周一为星期的开始  | 
| 
 %x  | 
 本地相应的日期表示  | 
| 
 %X  | 
 本地相应的时间表示  | 
| 
 %Z  | 
 当前时区的名称  | 
| 
 %%  | 
 %号本身  | 
常用模块 - datetime模块的更多相关文章
- Python模块01/自定义模块/time模块/datetime模块/random模块
		
Python模块01/自定义模块/time模块/datetime模块/random模块 内容大纲 1.自定义模块 2.time模块 3.datetime模块 4.random模块 1.自定义模块 1. ...
 - Python全栈之路----常用模块----datetime模块详解
		
相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...
 - python模块-datetime模块
		
上面一篇已经讲了time模块,再来学习datetime模块. datetime主要有datetime.timedelta.time.date这4个子模块. a.datetime常用的函数(dateti ...
 - 模块-os.system的两个模块/random模块/datetime模块/写日志
		
一.获取当前目录的路径 os.path.abspath('.')# 取绝对路径 os.getcwd()# 取当前路径 .代表当前目录 ..上一级目录 ../.. 二.执行操作系统命令1.os.syst ...
 - Python3 time模块&datetime模块&random模块
		
''' time模块 ''' # import time # print(help(time)) # help()提供帮助 # print(time.time()) # 1970年开始到现在的秒数(时 ...
 - time模块/datetime模块/calendar模块
		
time模块时间的表示形式时间戳:以整型或浮点型表示⼀个时间,该时间以秒为单位,这个时间是以1970年1⽉1⽇0时0分0秒开始计算的. 导入time import time 1.返回当前的时间戳 no ...
 - time模块   datetime 模块    random 模块    OS 模块     sys 模块    hashlib 模块
		
time模块 在python中的时间表现形式: 时间戳 (自1970-01-01-00-00 到当前时间,按秒计算,一共过了多少秒 格式化时间 返回的是时间的字符串 格式化时间对象 返回的是一个元组 ...
 - python模块 | 时间处理模块—datetime模块
		
在python中,与时间处理相关的模块有 time,datetime,calendar. 时间的两个概念: UTC(世界协调时): 整个地球分为二十四时区,每个时区都有自己的本地时间.格林威治天文时间 ...
 - time模块&datetime模块
		
import time a=time.localtime(time.time()) #将时间戳转换为当前时区的元组 print(a) c=time.gmtime(time.time()) #把时间戳转 ...
 
随机推荐
- 核心API
			
1.ProcessEngine ProcessEngine是Activiti中最核心的类,其他的类都是由他而来.Activiti流程引擎的配置文件是名为 activiti.cfg.xml 的XML文件 ...
 - 基础架构之GitLab
			
Git几乎是软件开发人员的必备工具了,关于代码管理,公司都一般都会搭建自己的仓库,关于GitLab的详细介绍参见官方网站详见 https://about.gitlab.com,这篇文章主要介绍安装及使 ...
 - margin的auto的理解    top,left[,bottom,right]    position
			
auto auto 总是试图充满父元素 margin有四个值: All the margin properties can have the following values: auto - the ...
 - Netty入门4之----如何实现长连接
			
 前面三章介绍了Netty的一些基本用法,这一章介绍怎么使用Netty来实现一个简单的长连接demo. 关于长连接的背景知识,可以参考<如何使用Socket实现长连接>  一个简单的长 ...
 - Redis缓存方案
			
1 Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...
 - SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建
			
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
 - jquery实用技巧之输入框提示语句
			
我们在编写网页的时候不可避免的会遇到输入框,那么怎么设计输入框才能更加优雅呢?不同的人会有不同的答案,下面分享一个比较不错的设计. 效果图 细节 这个效果主要是通过JQuery来实现,我的思路如下: ...
 - 深入理解JNI 邓平凡
			
深入理解JNI 邓凡平 1)使用的时候 :加载libmedia_jni.so 并接着调用JNI_Onload->register_android_media_MediaScanner动态注册JN ...
 - multiGet(下载软件)
			
下载软件 apt-get install multiGet
 - jq仿 妙味课堂导航01
			
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...