Datetime模块
导入模块
- 只导入模块名
- 使用模块的类时需要写的代码较长如:使用
date
类的today()
方法就要写:datetime.date.today()
1 2 3 4 5 6
| import datetime
datetime.date.today() datetime.date.today().isocalendar() datetime.datetime.now() datetime.datetime.now().isoformat()
|
exp:
datetime.date(2021, 8, 4)
1
| datetime.IsoCalendarDate(year=2021, week=31, weekday=3)
|
exp:
datetime.datetime(2021, 8, 4, 1, 21, 54, 884090
'2021-08-04T01:21:54.885103'
导入模块的类
1 2 3
| - 这样可以省略模块名 - `from datetime import date` # 导入datetime的date类 - `from datetime import date, time, datetime,timedelta` # 一次导入datetime的多个常用类
|
exp:
1 2 3 4 5 6
| from datetime import date, time, datetime, timedelta
date.today() date.today().isocalendar() datetime.now() datetime.now().isoformat()
|
exp:
1 2 3
| datetime.date(2021, 8, 4) datetime.IsoCalendarDate(year=2021, week=31, weekday=3) datetime.datetime(2021, 8, 4, 1, 21, 54, 904688)
|
'2021-08-04T01:21:54.904688'
模块中包含的类
类名 | 功能说明 |
---|
date | 日期对象,常用的属性有year, month, day |
time | 时间对象 |
datetime | 日期时间对象,常用的属性有hour, minute, second, microsecond |
datetime_CAPI | 日期时间对象C语言接口 |
timedelta | 时间间隔,即两个时间点之间的长度 |
tzinfo | 时区信息对象 |
date类
date对象构成
1 2 3 4
| - date对象由year年份、month月份及day日期三部分构成: - `datetime.date(self, /, *args, **kwargs)` - 返回日期对象元组(year,month,day) - 通过`.year`,`. month`,`.day` 分别获取年月日
|
常用类的方法和属性
date.max |
对象所能表示的最大日期(9999-12-31 |
date.min |
对象所能表示的最小日期(0001-01-01) |
date.today() | 返回一个表示当前本地时间的date对象 |
date.resolution | date对象表示日期的最小单位(天) |
date.fromtimestamp(timestamp) | 根据给定的时间戳,返回一个date对象 |
常用的方法和属性
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()方法相同) |
### 返回当前日期
exp:
1 2 3 4 5
|
d = date.today()
d, d.year, d.month, d.day
|
(datetime.date(2021, 8, 4), 2021, 8, 4)
最大最小日期
exp:
(datetime.date(9999, 12, 31), datetime.date(1, 1, 1))
最小日期单位
exp
datetime.timedelta(days=1)
从时间戳返回date
返回年、月、日
exp
2021
替换年、月、日
exp:
1 2 3 4 5 6 7
|
date.today().replace(year=2019)
date.today().replace(day=23)
|
1 2
| datetime.date(2019, 8, 4) datetime.date(2021, 8, 23)
|
返回time.struct_time类型
exp
1 2
| date.today().timetuple()
|
1
| time.struct_time(tm_year=2021, tm_mon=8, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=216, tm_isdst=-1)
|
返回元年至今的天数
exp
1 2 3
|
date.today().toordinal()
|
返回周一为0的星期
exp:
1 2 3
|
date.today().weekday()
|
返回周一为1的星期
exp:
1 2 3
|
date.today().isoweekday()
|
返回标准日历
exp:
1 2 3
|
date.today().isocalendar()
|
1
| datetime.IsoCalendarDate(year=2021, week=31, weekday=3)
|
返回 (YYYY-MM-DD) 的日期字符串
exp:
1 2 3
|
date.today().isoformat()
|
返回指定的字符串日期格式
exp:
1
| date.today().strftime('%Y-%m-%d-%a-%A-%W')
|
1
| '2021-08-04-Wed-Wednesday-31'
|
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() | 返回自定义格式化字符串 |
最大最小时间
exp:
1
| (datetime.time(23, 59, 59, 999999), datetime.time(0, 0))
|
最小时间单位
exp:
1
| datetime.timedelta(microseconds=1)
|
返回指定的字符串时间格式
exp:
1
| time(23, 57, 34, 345).strftime("%H:%M:%S")
|
返回标准的字符串格式
exp:
1
| time(23, 57, 34, 345).isoformat()
|
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.fromtimestamp(timestamp[,tz]) | 根据给定的时间戳返回datetime对象,如果指定tz,则返回tz时区datetime对象 |
datetime.utcfromtimestamp(timestamp) | 根据时间戳创建一个datetime对象 |
常用的方法和属性
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.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.ctime() | 等价与time模块的time.ctime(time.mktime(d.timetuple())) |
dt.strftime() | 返回指定格式的时间字符串 |
返回当前时刻
exp:
1
| datetime.datetime(2021, 8, 4, 1, 21, 55, 184731)
|
返回日期date
exp:
1
| datetime.date(2021, 8, 4)
|
返回时间time
exp:
1
| datetime.time(1, 21, 55, 216736)
|
返回UTC时间元组
exp:
1
| datetime.now().utctimetuple()
|
1
| time.struct_time(tm_year=2021, tm_mon=8, tm_mday=4, tm_hour=1, tm_min=21, tm_sec=55, tm_wday=2, tm_yday=216, tm_isdst=0)
|
将date对象和time对象合并
exp:
1 2 3 4 5
| a=datetime.now() d=a.date() t=a.time()
datetime.combine(d,t)
|
1
| datetime.datetime(2021, 8, 4, 1, 21, 55, 248728)
|
返回当前时刻的UTC
exp:
1 2
| datetime.utcnow() datetime.now()
|
1 2
| datetime.datetime(2021, 8, 3, 17, 21, 55, 264729) datetime.datetime(2021, 8, 4, 1, 21, 55, 264729)
|
根据字符串返回datetime
exp:
1
| datetime.strptime("2021-07-31 23:45","%Y-%m-%d %H:%M")
|
1
| datetime.datetime(2021, 7, 31, 23, 45)
|
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() | 以秒为单位返回该时间差 |
### 时间的加减
exp:
1 2 3 4 5 6 7 8 9 10 11 12
| start_time = datetime.now()
end1=start_time + timedelta(1) end1
|
1
| datetime.datetime(2021, 8, 5, 1, 21, 55, 296744)
|
exp:
1
| start_time + timedelta(hours=16)
|
1
| datetime.datetime(2021, 8, 4, 17, 21, 55, 296744)
|
exp:
1
| start_time + timedelta(hours=16,minutes=35)
|
1
| datetime.datetime(2021, 8, 4, 17, 56, 55, 296744)
|
exp:
1
| start_time + timedelta(hours=16,seconds=40,weeks=2,days=1)
|
1
| datetime.datetime(2021, 8, 19, 17, 22, 35, 296744)
|
计算上个月的最后一天和第一天的日期
exp:
1 2 3 4 5 6 7 8 9
|
td = date.today() a = datetime(td.year, td.month, 1) x = a + timedelta(days=-1) x
y = datetime(x.year, x.month, 1) y
|
1 2
| datetime.datetime(2021, 7, 31, 0, 0) datetime.datetime(2021, 7, 1, 0, 0)
|
计算上周一和周日的日期
exp:
1 2 3 4
| w = date.today().isoweekday() d1=date.today()-timedelta(w+6) d7=date.today()-timedelta(w) d1,d7
|
1
| (datetime.date(2021, 7, 26), datetime.date(2021, 8, 1))
|
计算指定日期当月最后一天的日期和本月天数
exp:
1 2 3 4
| a = "1978-9-2" d = datetime.strptime(a, "%Y-%m-%d") d1 = datetime(d.year, d.month + 1, 1) - timedelta(1) d1.strftime("%Y-%m-%d"), d1.day
|
计算指定日期下个月当天的日期
exp:
1 2 3 4
| a = "2002-1-9" d = datetime.strptime(a, "%Y-%m-%d") d1 = datetime(d.year, d.month + 1, d.day) d1.strftime("%Y-%m-%d")
|
获得本周一至今天的时间段并获得上周对应同一时间段
exp:
1 2 3 4
| td=date.today().isoweekday() d1=date.today()-timedelta(td-1) [d1.isoformat(),date.today().isoformat(),] [(d1-timedelta(weeks=1)).isoformat(),(date.today()-timedelta(weeks=1)).isoformat()]
|
1 2
| ['2021-08-02', '2021-08-04'] ['2021-07-26', '2021-07-28']
|
日期的字符串输出
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 | 当前时区的名称 |
%% | %号本身 |