本文约3450字,建议阅读时间17~20分钟
关键字:python,日期时间操作,datetime,timedelta,date,time,datetime
python中处理时间日期相关的主要有标准库datetime(时间日期操作)、time(时间访问和转换)和calendar(日历相关操作)等,第三方库dateutil(时区扩展和解析支持)等,本文主要介绍datetime模块。
一、两个常量
datetime.MINYEAR
#返回1
datetime.MAXYEAR
#返回9999
二、可用的类型
包含日期类date、日期时间类datetime、时间类time(没有闰秒的概念)、时间间隔类timedelta、时区类tzinfo、timezone,它们之间的关系如下:
类型 |
父类 |
子类 |
date |
object |
datetime |
datetime |
date |
- |
time |
object |
- |
timedelta |
object |
- |
timezone |
tzinfo |
- |
tzinfo |
object |
timezone |
其中:
日期类属性:year、month、day;
时间类属性:hour、minute、second、microsecond(无返回0)、tzinfo(无返回None);
日期时间类属性:year、month、day、hour、minute、second、microsecond(无返回0)、tzinfo(无返回None);
三、时间间隔类timedelta
1、实例的生成
from datetime import timedelta
delta1=timedelta(days=5,seconds=30,microseconds=234,milliseconds=3,minutes=3,hours=2,weeks=2)
delta1
#返回datetime.timedelta(19, 7410, 3234)
包含参数days、seconds、microseconds(百万分之一秒)、milliseconds(毫秒)、minutes、hours、weeks。所有参数都默认为0,且可以是整数或者浮点数,也可以是正数或者负数,并且前三个参数之后的参数需要转换为前三个参数,比如:
1millisecond=1000microsecond
1minutes=60seconds
1hours=3600seconds
1weeks=7days
且转换后的前三个参数具有如下限制:
-999999999 <= days <= 999999999
0 <= seconds < 3600*24
0 <= microseconds < 1000000
例如:
delta2=timedelta(microseconds=-1)
delta2
#datetime.timedelta(-1, 86399, 999999),可理解为倒回0.000001秒
2、类属性
(1)获取时间间隔的最小值
timedelta.min
#返回datetime.timedelta(days=-999999999)
(2)获取时间间隔的最小值
timedelta.max
#返回datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)
获取两个时间间隔的最小间隔单位
timedelta.resolution
#返回timedelta(microseconds=1)
3、实例属性
days(间隔天数)、seconds(间隔秒数)、microseconds(间隔微秒数)
delta1.days
#返回19
4、实例方法
期间总的间隔秒数:total_seconds()
from datetime import datetime
dt1=datetime(2020,7,21,15,20,15)
dt2=datetime(2020,7,20,12,20,15)
(dt1-dt2).seconds
#返回10800
(dt1-dt2).total_seconds()
#返回97200,注意与seconds的区别!
5、其他
timedelta类型数据支持四则运算及比较运算,如果出现浮点数则四舍五入到最近的那个时间间隔,它还可以通过str、repr转换为字符串(注:两者返回的字符串不同!)。
str(delta1)
#返回'19 days, 2:03:30.003234'
repr(delta1)
#返回'datetime.timedelta(19, 7410, 3234)'
四、日期类date
1、实例的生成
from datetime import date
dt=date(year=2020,month=7,day=24)
#返回datetime.date(2020,7,24)
2、类方法
(1)获取当天的日期date.today()
#等于date.fromtimestamp(time.time())
(2)根据天数得到日期(1表示1年1月1日)
date.fromordinal(737630)
#返回datetime.date(2020, 7, 24)
#date.fromordinal(dt.toordinal())=dt
(3)将日期字符串转换为日期(python3.7新增)
date.fromisoformat(‘2020-07-24’)
#返回datetime.date(2020, 7, 24)
将日期转换为日期字符串(python3.7新增)
date.isoformat(dt)
#返回’2020-07-24’
(4)通过返回给定年、周、天的日历日期(python3.8新增)
date.fromisocalendar(1,2,1)
#返回datetime.date(1,1,8)
返回日期的年、周、天数(python3.8新增)
date.isocalendar(dt)
#返回(2020, 30, 5)
3、类属性
(1)最小日期值
date.min
#返回date(1,1,1)
(2)最大日期值
date.max
#返回date(9999,12,31)
(3)最小日期间隔
date.resolution
#datetime.timedelta(days=1)
4、实例属性
year(年)、month(月)、day(日)
dt.month
#返回7
5、实例方法
(1)替换日期的某年某月某日
date.replace(year,month,day)
dt.replace(month=8,day=1)
#返回datetime.date(2020,8,1)
(2)返回日期的时间范式
dt.timetuple()
#返回time.struct_time(tm_year=2020, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0,
tm_sec=0, tm_wday=4, tm_yday=206, tm_isdst=-1),其中分别为年、月、日、时、分、秒、当周第几天(星期一为0)、当年第几天、是否夏时制,返回time.struct_time对象;
(3)计算日期的顺序天数(1年1月1日为1)
dt.toordinal()
#返回737630
(4)计算日期周第几天
dt.weekday()
#返回4(注:星期一为0,星期天为6)
dt.isoweekday()
#返回5,(注:星期一为1,星期天为7)
(5)返回标准化日历年数、周数、周几
dt.isocalendar()
#(2020, 30, 5)
#注:每年开始的第一个周四所在的周为第一周
(6)返回日期的字符串
dt.isoformat()
#返回’2020-07-24’
dt.__str__()
#返回’2020-07-24’
dt.ctime()
#返回'Fri Jul 24 00:00:00 2020'
#等于time.ctime(time.mktime(dt.timetuple()))
dt.strftime(‘%Y-%m-%d’)
#返回’2020-07-24’
dt.__format__()
#返回’2020-07-24’
五、时间类time
1、实例的创建
from datetime import time
tm=time(hour=16,minute=16,second=16,microsecond=16,tzinfo=None,fold=0)
tm
#返回datetime.time(16,16,16,16)
#tzinfo为时区对象,fold为是否有重叠
2、类属性
(1)时间的最小值
time.min
#返回datetime.time(0, 0)
(2)时间最大值
time.max
#返回datetime.time(23, 59, 59, 999999)
(3)时间的最小间隔
time.resolution
#返回timedelta(microseconds=1)
3、实例属性
hour(时)、minute(分)、second(秒)、microsecond(微秒)、tzinfo(时区信息)等
tm.second
#返回16
4、类方法
(1)将时间字符串转换为时间
time.fromisoformat(‘16:16:16.000016’)
#返回datetime.time(16,16,16,16)
将时间转换为字符串
time.isoformat(tm)
#'16:16:16.000016'
5、实例方法
(1)替换时间相应的属性
tm.replace(hour=18,minute=18,second=18,microsecond=18)
#返回datetime.time(18,18,18,18)
(2)将时间转换为字符串
tm.isoformat(timespec=’auto’)
#返回'16:16:16.000016'
#timespec参数还可以是如下值:
hours:返回’HH’形式
minutes:返回’HH:MM’形式
seconds:返回’HH:MM:SS’形式
milliseconds:返回’HH:MM:SS.sss’形式
microseconds:返回’HH:MM:SS.ffffff’形式
tm.__str__()
#返回'16:16:16.000016'
tm.strftime(‘%H:%M:%S.%f’)
#返回'16:16:16.000016'
tm.__format__(‘%H:%M:%S.%f’)
#返回'16:16:16.000016'
六、日期时间类datetime
1、实例的创建
from datetime import datetime
dttm=datetime(year=2020,month=7,day=31,hour=8,minute=8,second=8,microsecond=8,tzinfo=None,fold=0)
dttm
#返回datetime.datetime(2020, 7, 31, 8, 8, 8, 8)
2、类方法
(1)获取当前的日期时间
datetime.today()
#返回当前的年、月、日、时、分、秒、微妙
#等于datetime.fromtimestamp(time.time())
datetime.now(tz=None)
(2)将时间戳转换为日期时间
datetime.fromtimestamp(timestamp)
datetime.fromtimestamp(1596154088.000008)
#返回datetime.datetime(2020, 7, 31, 8, 8, 8, 8)
(3)将序数转换为日期时间(注:只返回日期,时间为0)
datetime.fromordinal(737637)
#返回datetime.datetime(2020, 7, 31, 0, 0)
(5)将日期和时间合并
from datetime import date,time
dt=date(2020,7,31)
tm=time(8,8,8,8)
datetime.combine(dt,tm)
#返回datetime.datetime(2020, 7, 31, 8, 8, 8, 8)
(5)将字符串转换为日期时间
datetime.fromisoformat(‘2020-07-31 13:50:11.006’)
#返回datetime.datetime(2020,7,31,13,50,11,6000)
#python3.7新增
将日期时间转换为字符串
datetime.isoformat(dttm)
#返回’2020-07-31 08:08:08.000008’
(6)将日历年、周、天转换为日期时间
datetime.fromisocalendar(2020,31,5)
#返回datetime.datetime(2020,7,31,0,0)
将日期时间转换为日历年、周、天
datetime.isocalendar(dttm)
#返回(2020,31,5)
(7)将字符串转换成指定格式的日期时间
datetime.strptime(‘2020-07-31 15:11:11.111’,’%Y-%m-%d %H:%M:%S.%f’)
#返回datetime.datetime(2020,7,31,15,11,11,111000)
3、类属性
(1)日期时间的最小值
datetime.min
#返回datetime.datetime(1, 1, 1, 0, 0)
(2)日期时间的最大值
datetime.max
#返回datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
(3)日期时间间隔的最小值
datetime.resolution
#返回timedelta(microsecond1=1)
4、实例属性
year、month、day、hour、minute、second、microsecond、tzinfo等,含义同date类、time类。
5、实例方法
(1)获取日期时间的年月日,返回date类型
dttm.date()
#返回datetime.date(2020,7,31)
(2)获取日期时间的时分秒微妙,返回time类型
dttm.time()
#返回datetime.time(8, 8, 8, 8)
dttm.timetz()
#返回datetime.time(8, 8, 8, 8)
(3)替换日期时间的相应属性
dttm.replace(hour=18,minute=18,second=18,microsecond=18)
#返回datetime.datetime(2020, 7, 31, 18, 18, 18, 18)
(4)返回日期时间的time.struct_time类型
dttm.timetuple()
#返回time.struct_time(tm_year=2020, tm_mon=7, tm_mday=31, tm_hour=8, tm_min=8,
tm_sec=8, tm_wday=4, tm_yday=213, tm_isdst=-1)
(5)返回日期时间的序数
dttm.toordinal()
#返回737637
(6)返回日期时间的时间戳
dttm.timestamp()
#返回1596154088.000008
#与time.time()类似
(7)返回日期时间的周几
dttm.weekday()
#返回4
#星期一为0,星期天为6
dttm.isoweekday()
#返回5
#星期一为1,星期天为7
(8)将日期时间转换为指定形式字符串
dttm.isoformat(sep=' ',timespec='auto')
#返回'2020-07-31 08:08:08.000008'
#sep参数为日期和时间的分割符,默认为’T’
#timespec参数还包含hours、minutes、seconds、milliseconds、microseconds,含义与date实例的该方法一致
dttm.__str__()
#返回'2020-07-31 08:08:08.000008'
#等于dttm.isoformat(‘ ’)
dttm.ctime()
#返回'Fri Jul 31 08:08:08 2020'
#等于time.ctime(time.mktime(dttm.timetuple()))
dttm.strftime('%Y-%m-%d %H:%M:%S.%f')
#返回'2020-07-31 08:08:08.000008'
dttm.__format__('%Y-%m-%d %H:%M:%S.%f')
#返回'2020-07-31 08:08:08.000008'
(完)
欢迎关注【lambda派】!
相关阅读:
语法典经谱:迭代器VS生成器
语法典经谱:类的定义
语法典经谱:功能函数的定义
语法典经谱:集合基本操作
语法典经谱:字典基本操作