Python_datetime模块
datetime模块重新封装了time模块,提供更多的接口,提供的类有:
- date,表示日期的类
- time,表示时间的类
- datetime,表示日期和时间的类
- timedelta,表示时间间隔,即两个时间点的间隔
- tzinfo,与时区有关的信息
( 这些类的对象都是不可变的 )
(类有类方法,类方法里有方法,方法继承了类方法)
1、date类
datetime.date(year,month,day)
常用的类方法与属性:
date.max | 对象所能表示的最大日期(9999-12-31) |
date.min | 对象所能表示的最小日期(0001-01-01) |
date.today() | 返回一个表示当前本地时间的date对象 |
date.resolution | date对象表示日期的最小单位(天) |
date.fromtimestamp(timestamp) | 根据给定的时间戳,返回一个date对象 |
实现:
import datetime import time print(datetime.date.max) print(datetime.date.min) print(datetime.date.today()) print(datetime.date.resolution) print(datetime.date.fromtimestamp(time.time()+3600000)) # 给定时间戳的 日期
9999-12-31 0001-01-01 2018-09-17 1 day, 0:00:00 2018-10-29
其中常用的方法与属性:
d.year | 年 |
d.month | 月 |
d.day | 日 |
d.replace(year[,month[,day]]) | 生成并返回一个新的日期对象,原日期对象不变 |
d.timetuple() | 返回日期对应的时间元组(time.struct_time)对象 |
d.toordinal() |
返回日期是自0001-01-01开始的第多少天 |
d.weekday() | 返回日期是星期几,[0,6],0表示星期一,1表示星期二 |
d.isoweekday() | 返回日期是星期几,[1,7],1表示星期一,2表示星期二 |
d.isocalendar() | 返回格式为(year,weekday,isoweekday)的元组 |
d.isoformat() | 返回‘YYYY-MM-DD’格式的日期字符串 |
d.strftime() | 自定义格式化字符串(和time模块的strftime()方法相同) |
实现:
print(datetime.date.year) # <attribute 'year' of 'datetime.date' objects> print(datetime.date.today().year) # 本地时时间的年 print(datetime.date.fromtimestamp(time.time()+3600000).month) # 给定时间戳的 月 print(datetime.date.today().day) # 日 print(datetime.date.today().replace(year=2019)) print(datetime.date.today().timetuple()) print(datetime.date.today().toordinal()) print(datetime.date.today().weekday()) print(datetime.date.today().isoweekday()) print(datetime.date.today().isocalendar()) print(datetime.date.today().isoformat()) print(datetime.date.today().strftime('%Y-%m-%d-%a-%I'))
<attribute 'year' of 'datetime.date' objects> 2018 10 17 2019-09-17 time.struct_time(tm_year=2018, tm_mon=9, tm_mday=17, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=260, tm_isdst=-1) 736954 0 1 (2018, 38, 1) 2018-09-17 2018-09-17-Mon-12
2、time类
其中,time类和time模块各自独立
datetime.time(hour[,minute[,decond[,microsecond[,tzinfo]]]])
常用的类方法与属性:
time.max | 表示的最大时间 |
time.min | 表示的最小时间 |
time.resolution | 时间的最小单位,这里是1微秒 |
常用的方法与属性:
t.hour | 时 |
t.minute | 分 |
t.second | 秒 |
t.microsecond | 微秒 |
t.tzinfo | 时区信息 |
t.replace() | 用参数指定替代(时,分,秒,微秒,时区)对象,生成并返回新的对象 |
t.isoformat() | 返回'HH:MM:SS'格式字符串 |
t.strftime() | 返回自定义格式化字符串 |
3、datetime类
相当于date和time结合起来
datetime.datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]])
常用的类方法与属性:
datetime.max | 最大日期 |
datetime.min | 最小日期 |
datetime.resolution | datetime对象所表示日期的最小单位,1微秒 |
datetime.today() | 返回当前本地时间 |
datetime.now([tz]) | 返回当前本地时间,如果指定tz,则返回tz时区当地时间 |
datetime.utcnow() | 返回当前UTC时间 |
datetime.fromtimestamp(timestamp[,tz]) | 根据给定的时间戳返回datetime对象,如果指定tz,则返回tz时区datetime对象 |
datetime.utcfromtimestamp(timestamp) | 根据时间戳创建一个datetime对象 |
datetime.combine(date,time) | 把指定的date和time对象整合为datetime对象 |
datetime.strftime(date_string,format) | 将格式化字符串转换为datetime对象 |
实现:
import datetime import time print(datetime.datetime.resolution) print(datetime.datetime.today()) print(datetime.datetime.now()) print(datetime.datetime.utcnow()) print(datetime.datetime.fromtimestamp(time.time())) print(datetime.datetime.utcfromtimestamp(time.time())) print(datetime.datetime.combine(datetime.date(2019, 3, 5), datetime.time(3, 2, 45))) print(datetime.datetime.strftime(datetime.date(2019,9,2),'%Y-%m-%d %X'))
0:00:00.000001 2018-09-17 20:32:36.868500 2018-09-17 20:32:36.868500 2018-09-17 12:32:36.868500 2018-09-17 20:32:36.868500 2018-09-17 12:32:36.868500 2019-03-05 03:02:45 2019-09-02 00:00:00
其中常用的方法与属性:
dt.year dt.month dt.day |
年 月 日 |
dt.hour dt.minute dt.second |
时 分 秒 |
dt.microsecond | 微妙 |
dt.tzinfo | 时区信息 |
dt.date() | 获取dt的date对象 |
dt.time() | 获取dt的time对象,tzinfo 为none |
dt.timetz() | 获取dt的time对象,tzinfo 为与datetime的tzinfo相同 |
dt.replace() | 指定参数替代(年,月,日,时,分,秒,微妙,时区),生成并返回新对象 |
dt.timetuple() | 返回日期时间对应的时间元组(time.struct_time)(不包括tzinfo) |
dt.utctimetuple() | 返回UTC时间对应的时间元组(不包括tzinfo) |
dt.timestamp() | 返回dt对象对应的时间戳 |
dt.toordinal() | 返回日期是是自 0001-01-01 开始的第多少天(与date类相同) |
dt.weekday() | 返回日期是星期几,[1, 7], 1表示星期一(与date类相同) |
dt.isocalendar() | 返回格式如(year,month,day)的时间元组(与date类相同) |
dt.isoformat() | 返回格式如'YYYY-MM-DD HH:MM:SS'的字符串 |
dt.ctime() | 等价与time模块的time.ctime(time.mktime(d.timetuple())) |
dt.strftime() | 返回指定格式的时间字符串 |
实现:
import datetime,time print(datetime.datetime.today().tzinfo) print(datetime.datetime.today().date()) print(datetime.datetime.today().time()) print(datetime.datetime.today().timetz()) print(datetime.datetime.today().timetuple()) print(datetime.datetime.today().timestamp()) print(datetime.datetime.today().ctime())
None 2018-09-17 20:36:47.560500 20:36:47.560500 time.struct_time(tm_year=2018, tm_mon=9, tm_mday=17, tm_hour=20, tm_min=36, tm_sec=47, tm_wday=0, tm_yday=260, tm_isdst=-1) 1537187807.5605 Mon Sep 17 20:36:47 2018
4、timedelta类
时间加减(代表了两个datetime之间的时间差)
datetime.timedalta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0 ,hours=0,weeks=0)
在日期上做天,小时,分钟,秒,毫秒,微秒,周 的时间计算
- 1毫秒转换为1000微秒
- 1分钟转换为60秒
- 1小时转换为3600秒
- 1周转换为7天
其中,timedelta内部只存储 days,seconds,microseconds
方法与属性:
td.days | 天(范围[-999999999,999999999]) |
td.seconds | 秒(范围[0,86399]) |
td.microseconds | 微秒(范围[0,999999]) |
td.total_seconds() | 以秒为单位返回该时间差 |
实现:
m = datetime.datetime.now() print(m) l = m + datetime.timedelta(3) print(l) n = m + datetime.timedelta(hours=4) print(n) span = l-m print(span) print(span.total_seconds())
2018-09-17 16:38:43.021000 2018-09-20 16:38:43.021000 2018-09-17 20:38:43.021000 3 days, 0:00:00 259200.0
5、tzinfo时区类
其中,tzinfo是一个抽象类,所以不能直接被实例化
时间转换需要用datetime和pytz来转换时区