在工作中遇到了这样一个需求,需要对时间做各种转换,一时之间没有构思,只隐约记得Python当中的time模块和datetime模块能够完成这件事,所以特意在工作之余花点时间对这两个标准库系统的学习一下并记录下来,方便以后查阅。
首先datetime模块的功能是在支持日期时间数学运算的同时,关注如何能够更有效地解析其属性用于格式化输出和数据操作。
1、date.min # 返回date能表示的最小时间范围 --> datetime.date(1, 1, 1) 2、date.max # 返回date能表示的最大时间范围 --> datetime.date(9999, 12, 31) 3、date.resolution # 返回两个日期对象之间可能的最小的度量单位(单位为天),即不可能是小数 --> datetime.timedelta(1) 4、date.today() # 返回当前的时间,例: datetime.date(2019, 5, 26)
实例方法: 1、year # 返回date日期所处的年份,例:date.today().year --> 2019 2、month # 返回date日期所处的月份,例:date.today().month --> 5 3、day # 返回date日期所处的年份,例:date.today().day --> 26 4、replace(year, month, day) # 使用给定的参数对原来的日期进行替换
# 例: datetime.date.today().replace(day=25) # 结果为:datetime.date(2019, 5, 25)5、timetuple() # 将给定日期转化成类似结构化时间的操作,与time.localtime()的结果相似
# 例: datetime.date.today().timetuple() # 结果为:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=146, tm_isdst=-1) # 其中hour、min和sec默认为0,wday是星期几 # yday是当前时间是这一年的第多少天,isdst是指当前时间是不是农历时间6、toordinal() # 将当前时间转换成农历时间
# 例: datetime.date.today().toordinal() # 结果为:7372057、weekday() # 返回当前时间是属于一周当中的第几天,默认从0开始 8、isoweekday() # 返回当前时间是属于一周当中的第几天,默认从1开始 9、isocalendar() # 返回ISO日历的时间
# 例: datetime.date.today().isocalendar() # 结果为:(2019, 21, 7) # 21表示是今年的第多少周,7表示是这周的星期几10、isoformat() # 返回当前时间的字符串形式, date(2019, 5, 26).isoformat() == ‘2019-5-26’ 11、__str__() # 返回当前时间的字符串形式,与isoformat()类似 12、ctime() # 返回当前时间的字符串形式,如:‘Sun May 26 00:00:00 2019’ 13、strftime(format) # 返回当前时间的字符串形式,并以参数format的样式输出
# 例: datetime.date.today().strftime('%Y-%m-%d') # 结果为:'2019-05-26'14、__format__(format) # 与strftime()相似
日期之间还支持如下运算:
date2 = date1 + timedelta date2 = date1 - timedelta timedelta = date1 - date2 date1 < date2time对象表示某一天的本地时间,当然会因所处时区不一样而不同。
类属性: 1、time.max # time对象能够表示的最晚的时间 --> datetime.time(23, 59, 59, 999999) 2、time.min # time对象能够表示的最早的时间 --> datetime.time(0, 0) 3、time.resolution # 两个time对象之间能够表示的最小的时间差(即1毫秒) --> datetime.timedelta(0, 0, 1)
实例属性: 1、hour # 返回当前时间的hour 2、minute # 返回当前时间的minute 3、second # 返回当前时间的second 4、microsecond # 返回当前时间的microsecond 5、tzinfo # 返回当前时间的tzinfo时区 6、fold # 返回当前时间的fold值,表示同一时间在wall time上的先后顺序
# 例: time_now = datetime.time(hour=15, minute=36, second=22, microsecond=353) time_now.hour # 15 time_now.minute # 36 time_now.second # 22 time_now.microsecond # 353 time_now.tzinfo # 默认为None time_now.fold # 默认为0实例方法: 1、replace() # 根据传入的参数修改原始时间数据
# 例: time_now = datetime.time(hour=15, minute=36, second=22, microsecond=353) time_now.replace(minute=42) time_now # datetime.time(15, 42, 22, 353)2、isoformat(timespec='auto') # 根据传入的timespec参数来指定输出的时间字符串的格式
# 例: time_now = datetime.time(hour=15, minute=36, second=22, microsecond=353) time_now.isoformat(timespec='auto') # '15:36:22.000353' time_now.isoformat(timespec='minutes') # '15:36' time_now.isoformat(timespec='hours') # '15' time_now.isoformat(timespec='milliseconds') # '15:36:22.000'3、__str__() # 与isoformat()相似 4、strftime() # 构造格式化的时间字符串
# 例: time_now.strftime('%H-%M-%S') # 结果为:'15-36-22'datatime对象包含了date对象和time对象的所有信息。
类方法: 1、datetime.today() # 返回当前的时间的datetime对象,和datetime.fromtimestamp(time.time())表示的结果相同。
# 例: datetime.datetime.today() # 结果为:datetime.datetime(2019, 5, 27, 17, 0, 5, 342702)2、datetime.now(tz=None) # 返回当前的时间,如果指定了tz时区参数,则返回该时区的时间。 3、datetime.utcnow() # 返回当前时间的世界标准时间的datetime对象。
# 例: datetime.datetime.utcnow() # 结果为:datetime.datetime(2019, 5, 27, 9, 14, 0, 806004)4、datetime.fromtimestamp(timestamp, tz=None) # 根据unix可移植操作系统接口的时间戳获取datetime对象。
# 例: datetime.datetime.fromtimestamp(time.time()) # 结果为:datetime.datetime(2019, 5, 27, 17, 19, 11, 81477)5、datetime.utcfromtimestamp(timestamp) # 根据unix可移植操作系统接口的世界标准时间戳获取datetime对象。 6、datetime.fromordinal(ordinal) # 根据农历时间返回datetime时间对象。 7、datetime.combine(date, time, tzinfo=self.tzinfo) # 将date对象和time对象合并成datetime对象。
# 例: datetime.datetime.combine(datetime.date.today(), datetime.time(15, 42, 22, 353)) # 结果为:datetime.datetime(2019, 5, 27, 15, 42, 22, 353)8、datetime.strptime(date_string, format) # 根据format的样式将date_string日期字符串解析成datetime对象,如果两者不匹配会报错。
# 例: datetime.datetime.strptime('2019-05-27 17:18:18', '%Y-%m-%d %H:%M:%S') # 结果为:datetime.datetime(2019, 5, 27, 17, 18, 18)类属性: 同date对象和time对象。
实例属性:综合date对象的和time对象的所有。
实例方法: 1、date() # 返回当前datetime对象的date 2、time() # 返回当前datetime对象的time 3、replace() # 根据参数替换对应的时间 4、astimezone(tz=None) # 修改当前datatime对象的时区 5、utcoffset() # 返回与世界标准时间UTC的时差 6、timetuple() # 同date对象 7、timestamp() # 同time.time(),返回的是一个float类型的时间戳 8、weekday() # 同date对象 9、isoweekday() # 同date对象 10、isocalendar() # 同date对象 11、isoformat(sep='T', timespec='auto') # 同date对象,默认date和time以‘T’空格分开 12、__str__() # 同date对象 13、ctime() # 同date对象 14、strftime(format) # 同date对象 15、__format__(format) # 同strftime()方法
此对象表示的是持续的时间,时间间隔。一般表示日期之间的差值。
构造方法:timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有参数可正可负,可以为整型或者浮点型,默认为0。
类属性: 1、timedelta.min # 可表示的最小的负数 --> datetime.timedelta(-999999999) 2、timedelta.max # 可表示的最大的正数 --> datetime.timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) 3、timedelta.resolution # 可表示的最小差值 --> datetime.timedelta(microseconds=1)
实例方法: 1、total_seconds() # 计算该timedelta对象的总秒数
# 例: datetime.timedelta(days=10).total_seconds() # 结果为:864000.0以上就是一些会经常用到的一些时间对象的处理方法,至于datetime对象里面的tzinfo和timezone对象,因为涉及到时区的操作相对较少,所以这里就不再总结,感兴趣的同仁可以移步官网了解: https://docs.python.org/zh-cn/3.6/library/datetime.html