一、datetime模块介绍

(一)、datetime模块中包含如下类:

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

(二)、datetime模块中包含的常量

常量 功能说明 用法 返回值
MAXYEAR 返回能表示的最大年份 datetime.MAXYEAR 9999
MINYEAR 返回能表示的最小年份 datetime.MINYEAR 1

二、date类

(一)、date对象构成

1、date对象由year年份、month月份及day日期三部分构成:

date(year,month,day)

2、 通过yearmonthday三个数据描述符可以进行访问:

 >>> import datetime
>>> datetime.date.today()
datetime.date(2019, 8, 21)
>>> a = datetime.date.today()
>>> a
datetime.date(2019, 8, 21)
>>> a.year
2019
>>> a.month
8
>>> a.day
21 

3、当然,你也可以用__getattribute__(...)方法获得上述值:

 >>> a.__getattribute__('year')
2019
>>> a.__getattribute__('month')
8
>>> a.__getattribute__('day')
21

(二)、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 
示例如下:

d1 = datetime.date(2019, 8, 21)
d2 = datetime.date(2019, 8, 20)
print('d1.__eq__(d2)>>>{}\td1.__ge__(d2)>>>{}'.format(d1.__eq__(d2),d1.__ge__(d2)))
输出:
d1.__eq__(d2)>>>False d1.__ge__(d2)>>>True
 

2、获得二个日期相差多少天

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

方法名 方法说明 用法
__sub__(…) x - y x.__sub__(y)
__rsub__(…) y - x x.__rsub__(y)

示例如下:

 >>> a
datetime.date(2019, 8, 22)
>>> b
datetime.date(2019, 8, 15)
>>> a.__sub__(b)
datetime.timedelta(days=7)
>>> a.__rsub__(b)
datetime.timedelta(days=-7)
>>>

3、ISO标准化日期

如果想要让所使用的日期符合ISO标准,那么使用如下三个方法: 
1).isocalendar(...)*:返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7): 
示例如下

a = datetime.date(2019, 8, 21)
date_iso = a.isocalendar()
print('date_iso-->', date_iso)
print(date_iso[0], date_iso[1], date_iso[2])
输出:
date_iso--> (2019, 34, 3)
2019 34 3
2). isoformat(...): 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串; 

示例如下

 >>> a=datetime.date(2019, 8, 22)
>>> a.isoformat()
'2019-08-22'
>>>

3). isoweekday(...): 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7) 
示例如下:

 a=datetime.date(2019,8,22)
>>> a.isoformat()
'2019-08-22'
>>> a.isoweekday()
4

4).与isoweekday(...)相似的还有一个weekday(...)方法,只不过是weekday(...)方法返回的周一为 0, 周日为 6 
示例如下:

 >>> a.weekday()
3

4、其他方法与属性

1). timetuple(...):该方法为了兼容time.localtime(...)返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0:

 >>> a=datetime.date(2019, 8, 21)
>>> a.timetuple()
time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=233, tm_isdst=-1)
>>> a.timetuple().tm_year
2019
>>> a.timetuple().tm_mon
8
>>> a.timetuple().tm_mday
21

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

 >>> a=datetime.date(2019, 8, 21)
>>> a.toordinal()
737292
>>> a.toordinal()/365
2019.978082191781
>>> 

3). replace(...):返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产生新对象,不影响原date对象。

>>> a=datetime.date(2019, 8, 21)
>>> b = a.replace(2019,2,22)
>>> a
datetime.date(2019, 8, 21)
>>> b
datetime.date(2019, 2, 22)
>>> 

4).resolution:date对象表示日期的最小单位。这里是天。

 >>> datetime.date.resolution
datetime.timedelta(days=1) 

5).fromordinal(...):将Gregorian日历时间转换为date对象;Gregorian Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多。

 >>> a=datetime.date(2019, 8, 21)
>>> b = a.toordinal()
>>> b
737292
>>> datetime.date.fromordinal(b)
datetime.date(2019, 8, 21)
>>> 

6).fromtimestamp(...):根据给定的时间戮,返回一个date对象

 >>> import time
>>> tm=time.time()
>>> tm
1566373157.792394
>>> datetime.date.fromtimestamp(tm)
datetime.date(2019, 8, 21)
>>> 

7).today(...):返回当前日期

 >>> datetime.date.today()
datetime.date(2019, 8, 21)

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(2019, 8, 21)
>>> a.__format__('%Y-%m-%d')
'2019-08-21'
>>> a.__format__('%y/%m/%d')
'19/08/21'
>>>

与此方法等价的方法为strftime(...)

 >>> a.strftime("%Y%m%d")
'' 

关于格式化字符串的相关内容,请查阅本文最后的:附录:python中时间日期格式化符号 
2、如果只是相简单的获得日期的字符串,则使用__str__(...)

 >>> a.__str__()
'2019-08-21' 

3、如果想要获得ctime样式的格式请使用ctime(...):

 >>> a.ctime()
'Wed Aug 21 00:00:00 2019'

三、time类

(一)、time类的数据构成

time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成

 time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

相应的,time类中就有上述五个变量来存储应该的值:

 >>> a=datetime.time(15,52,25,599)
>>> a
datetime.time(15, 52, 25, 599)
>>> a.hour
15
>>> a.minute
52
>>> a.second
25
>>> a.microsecond
599
>>> a.tzinfo
>>>

date类一样,time类也包含__getattribute__(...)方法可以读取相关属性:

 >>> a.__getattribute__('hour')
15
>>> a.__getattribute__('minute')
52
>>> a.__getattribute__('second')
25 

(二)、time类中的方法和属性

1、比较时间大小

相关方法包括:__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:时间间隔单位为分钟

 >>> datetime.time.resolution
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)
>>> a.__str__()
'12:20:59.000899'
 

四、datetime类

(一)、datetime类的数据构成

datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类,相关的操作方法请参阅,本文上面关于二个类的介绍。其数据构成也是由这二个类所有的属性所组成的。

 datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

(二)、专属于datetime的方法和属性

1、 date(…):返回datetime对象的日期部分:

2、time(…):返回datetime对象的时间部分:

 1 >>> a=datetime.datetime.now()
2 >>> a
3 datetime.datetime(2019, 8, 21, 16, 0, 8, 432600)
4 >>> a.date()
5 datetime.date(2019, 8, 21)
6 >>> a.time()
7 datetime.time(16, 0, 8, 432600)
8 >>>  

3、utctimetuple(…):返回UTC时间元组:

 >>> a=datetime.datetime.now()
>>> a
datetime.datetime(2019, 8, 21, 16, 2, 3, 489601)
>>> a.utctimetuple()
time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=16, tm_min=2, tm_sec=3, tm_wday=2, tm_yday=233, tm_isdst=0)
>>> 

4、combine(…):将一个date对象和一个time对象合并生成一个datetime对象:

>>> a=datetime.datetime.now()
>>> a
datetime.datetime(2019, 8, 21, 16, 3, 50, 473403)
>>> b=a.date()
>>> c=a.time()
>>> datetime.datetime.combine(b,c)
datetime.datetime(2019, 8, 21, 16, 3, 50, 473403)
>>> 

5、now(…):返回当前日期时间的datetime对象:

>>> a=datetime.datetime.now()
>>> a
datetime.datetime(2019, 8, 21, 16, 3, 50, 473403) 

6、utcnow(…):返回当前日期时间的UTC datetime对象:

>>> a = datetime.datetime.utcnow()
>>> a
datetime.datetime(2019, 8, 21, 8, 5, 0, 192654)
>>> 

7、strptime(…):根据string, format 2个参数,返回一个对应的datetime对象:

 >>> a=datetime.datetime.strptime('2019-8-12 16:05','%Y-%m-%d %H:%M')
>>> a
datetime.datetime(2019, 8, 12, 16, 5) 

8、utcfromtimestamp(…):UTC时间戳的datetime对象,时间戳值为time.time():

 >>> datetime.datetime.utcfromtimestamp(time.time())
datetime.datetime(2019, 8, 21, 8, 7, 39, 865078)
>>>

五、timedelta类

一个timedelta对象表示一个时间长度,两个日期或者时间的差值

class datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)

所有的参数都是可选的,默认值为0,参数可以是整数或者浮点数,既可以是整数也可以是负数。

虽然说参数可以传递的单位很多,但是python内部实现只存储了days,seconds和microseconds三种单位,所有其他的单位在计算时都会转换成相应的三种单位:
1 millisecond = 1000 microseconds
1 minute = 60 seconds
1 hour = 3600 seconds
1 week = 7 days

此类中包含如下属性: 
1、days:天数 
2、microseconds:微秒数(>=0 并且 <1秒) 
3、seconds:秒数(>=0 并且 <1天)

一、两个datetime.datetime类型相减或者两个datetime.date类型相减的结果就是daftetime.delta类型
二、以下是具体使用方法
1、打印未来一天的时间
 >>> now=datetime.datetime.now()
>>> now
datetime.datetime(2019, 8, 21, 16, 18, 58, 864449)
>>> delta=datetime.timedelta(day=1)
>>> delta=datetime.timedelta(days=1)
>>> delta
datetime.timedelta(days=1)
>>> newtime=now+delta
>>> newtime
datetime.datetime(2019, 8, 22, 16, 18, 58, 864449)

2、以下是打印一天前的时间

 >>> newtime=now-delta
>>> newtime
datetime.datetime(2019, 8, 20, 16, 18, 58, 864449)
>>>

 

六、日期计算实操

1.获取当前日期时间:

 >>> now=datetime.datetime.now()
>>> now
datetime.datetime(2019, 8, 21, 16, 24, 42, 123371)
>>> today=datetime.date.today()
>>> today
datetime.date(2019, 8, 21)
>>> now.date()
datetime.date(2019, 8, 21)
>>> now.time()
datetime.time(16, 24, 42, 123371)
>>> 

2.获取上个月第一天和最后一天的日期:

 >>> today = datetime.date.today()
>>> today
datetime.date(2019, 8, 21)
>>> mlast_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(days=1)
>>> mlast_day
datetime.date(2019, 7, 31)
>>> mfirst_day = datetime.date(mlast_day.year, mlast_day.month, 1)
>>> mfirst_day
datetime.date(2019, 7, 1)
>>> 

3.获取时间差

时间差单位为秒

>>> start_time = datetime.datetime.now()
>>> end_time = datetime.datetime.now()
>>> (end_time-start_time).seconds
24
>>> 

差值不只是可以查看相差多少秒,还可以查看天(days), 秒(seconds), 微秒(microseconds).

4.计算当前时间向后8个小时的时间

 >>> d1 = datetime.datetime.now()
>>> d2=d1+datetime.timedelta(hours=8)
>>> d2
datetime.datetime(2019, 8, 22, 0, 31, 32, 967891)
>>>
 可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds).

5.计算上周一和周日的日期

 >>> today = datetime.date.today()
>>> today
datetime.date(2019, 8, 21)
>>> today_weekday = today.isoweekday()
>>> today_weekday
3
>>> last_sunday = today - datetime.timedelta(days=today_weekday)
>>> last_sunday
datetime.date(2019, 8, 18)
>>> last_monday = last_sunday - datetime.timedelta(days=6)
>>> last_monday
datetime.date(2019, 8, 12)
>>> 

6.计算指定日期当月最后一天的日期和本月天数

>>> date = datetime.date(2019,8,21)
>>> 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(2019, 8, 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(2019, 8, 19)
>>> today
datetime.date(2019, 8, 21)
>>> last_monday
datetime.date(2019, 8, 12)
>>> last_weekday
datetime.date(2019, 8, 14)
>>>
 

附录: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 当前时区的名称
%% %号本身
 
 
 

q

python——datetime模块的更多相关文章

  1. python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客

    python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客     python datetime模块strptime/strptime form ...

  2. python datetime模块参数详解

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块,它提供 的接口与C标准库time.h基本一致.相比于time模块,datetime模块的接 ...

  3. Python datetime模块的介绍

    datetime模块常用的主要有下面这四个类:(要清楚import datetime : 导入的是datetime这个包,包里有各种类) 1. datetime.date   用于表示年月日构成的日期 ...

  4. Python datetime模块的datetime类

    datetime模块定义了下面这几个类: datetime.date:表示日期的类.常用的属性有year, month, day. datetime.time:表示时间的类.常用的属性有hour, m ...

  5. python datetime模块详解

    datetime是python当中比较常用的时间模块,用于获取时间,时间类型之间转化等,下文介绍两个实用类. 一.datetime.datetime类: datetime.datetime.now() ...

  6. python datetime模块

    该模块的时间有限时限:1 - 9999 dir(datetime)  from datetime import datetime, timedelta, timezone dt = datetime. ...

  7. python datetime模块用strftime 格式化时间

    1 2 3 #!usr/bin/python import datetime datetime.datetime.now() 这个会返回 microsecond.因此这个是我们不需要的.所以得做一下修 ...

  8. python datetime模块来获取当前的日期和时间

    #!/usr/bin/python # -*- coding: UTF- -*- import datetime i = datetime.datetime.now() print ("当前 ...

  9. python datetime模块用法

    1. 创建naive(无时区信息)的datetime对象 import datetime dt_utc = datetime.datetime.utcnow() dt_utc # datetime.d ...

随机推荐

  1. Centos7 配置rsyslog客户端接收远程日志

    rsyslog 因为路由器我设定每天重启,但是日志一重启就会清除,并且路由器最多只能保存1024条记录,所以我想把路由器的日志记录到一台服务器上,发现路由器包含远程日志功能 于是我就在我的centos ...

  2. python 数据分析 Numpy(Numerical Python Basic)

    a = np.random.random((2,4)) a Out[5]: array([[0.20974732, 0.73822026, 0.82760722, 0.050551 ], [0.773 ...

  3. layui在当前页面弹出一个iframe层,并改变这个iframe层里的一些内容

    layer.open({ type: 2, title: "专家信息", area: ['100%', '100%'], content: '/ZhuanJiaKu/AddZhua ...

  4. Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程

    目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...

  5. 利用C51单片机模拟SPI进行双机通信

    SPI协议简述 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.由Motorola首创.SPI接口主要应用在 EEPROM,FLASH,实时时 ...

  6. apache重写规则简单理解

    1.前提:开启apache重写,并把httpd.conf里的相关的AllowOverride denied改为AllowOverride all 2.重写规则可写在项目根目录的.htaccess文件或 ...

  7. [NOI2004]郁闷的出纳员(平衡树)

    [NOI2004]郁闷的出纳员 题目链接 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的 ...

  8. mycat权威指南阅读笔记--序言1

    前言 mycat官方地址http://www.mycat.io/,mycat是关系数据库的中间件,也就是说它可以把后端的多个数据库,抽象成一个关系数据库. mycat能干啥 官方文档介绍,主要是用来做 ...

  9. C++中的const_cast

    开发环境 Qt Creator 4.8.2 编译器版本 MinGw 32-bit const_cast 用法: const_cast<type_id> (expression) 说明: 该 ...

  10. ArrayUtils工具类更加方便的操作数据

    不废话,上代码: package com.jxd; import org.apache.commons.lang3.ArrayUtils; public class TestArr { /** * A ...