关于时间的处理,python处理时间要多注意时间格式的类型。
准备工作关于时间处理,python最常用的是datetime, time , calendar 3个包,其中datetime中又有5个类。
整体来说,datetime包熟练基本满足大部分时间处理场景了。
datetime中5个类: - date类: 表示日期的类 - time类: 表示时间的类 - datetime类: 表示时间日期的类 - timedelta类: 表示两个datetime对象的差值; - tzinfo类: 表示时区的相关信息代码实例 一、import datetime :
datetime包主要提供表示和处理日期和时间的类, 主要用于创建和输出日期与信息的各种不同方式、时间增量的比较和计算.
datetime库定义了2个常量和5个类, 2个常量分别是MINYEAR=1和MAXYEAR=9999,5个类如上说明。
日常使用,基本熟练datetime包能满足90%以上需求;
from datetime import date today(): # 使用今天的日期构造对象 date.today() # 获取当前日期 datetime.date.today() # 获取当前日期 datetime.date.today().year # 获取当前年 datetime.date.today().month # 获取当前月 datetime.date.today().day # 获取当前日 # 或者用__getattribute__(...)方法获得上述值: datetime.date.today().__getattribute__('year') datetime.date.today().__getattribute__('month') datetime.date.today().__getattribute__('day')1.2 时间戳、结构 构造对象
fromtimestamp(): # 使用时间戳构造对象 date.fromtimestamp(123456789) fromordinal(): # 使用日期序数构造对象 datetime.date.fromordinal() # 整数序数,代表从公元1年1月1日开始的序数,序数每增加1代表增加1天,返回最终计算出的日期 datetime.date.toordinal(date(1992,1,21)) # 参数是日期对象,fromtimestamp的逆过程,返回值为fromtimestamp(n)中的日期序数n1.3 日期比较、计算 返回 T/F
a = datetime.date(2022,1,1) b = datetime.date(2022,1,21) print(a.__eq__(b)) # 等于 a == b print(a.__ge__(b)) # 大于等于 a>=b print(a.__gt__(b)) # 大于 a>b print(a.__le__(b)) # 小于等于 a<=b print(a.__lt__(b)) # 小于 ab # 两个日期差距 同datediff 日期差值计算另一个方法即:datetime.timedelta类; print(a.__sub__(b)) print(a.__rsub__(b)) #输出: 10 days, 0:00:00 -10 days, 0:00:001.4 返回周几
# 返回是周几 date(2022,1,1).weekday() # 周五 从0开始计 date(2022,1,1).isoweekday() # 周六 从1开始计1.5 格式化、字符转换
# 格式化输出日期 a.isocalendar()/datetime.date.isocalendar(a) # 返回: 公历日期, year年份,week number周数,weekday星期数 a.isoformat() /datetime.date.isoformat(a) # 返回: 符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串 # 时间和字符串转换 字符转换在时间维度下都是这个写法 strftime/strptime datetime.date.strftime(时间to字符串) datetime.date.strptime(字符串to时间) a.strftime("%Y-%m-%d") a.strftime("%Y-%m-%d") a.isoformat() a.replace(1992,1,21) # 传入参数为year,month,day,返回对应的新日期。 %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 当前时区的名称 %% %号本身2. time类: 基本同date类 2.1 基础 *** 作
from datetime import time time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成 import datetime datetime.time(12,30,59,21) datetime.time(12,30)2.2 时间比较 返回T/F
基本同datetime包一致;
# 时间大小比较 相关方法包括:__eq__(...), __ge__(...), __gt__(...), __le__(...), __lt__(...), __ne__(...) 与date类一致 ; a = datetime.date(2022,1,1) b = datetime.date(2022,1,21) print(a.__eq__(b)) # 等于 a == b print(a.__ge__(b)) # 大于等于 a>=b print(a.__gt__(b)) # 大于 a>b print(a.__le__(b)) # 小于等于 a<=b print(a.__lt__(b)) # 小于 ab2.3 格式化、字符转换
基本同datetime包一致;
# 时间to字符串 from datetime import time a = time(12,20,59,899) a.strftime('%H:%M:%S') == a.__format__('%H:%M:%S') # 格式化输出 a = datetime.time(12,20,59,899) a.isoformat() # 返回标准时间格式:HH:MM:SS.mmmmmm+zz:zz2.4 时区 *** 作
# 返回timezone的偏移量 比较少用 from datetime import datetime time.utcoffset() naive = datetime.now() naive.tzinfo naive.utcoffset() # 返回timezone的名称。 datetime.tzname()3. datetime类:
datetime类是date类和time类的合体 ,包含前两个类的全部参数, 相当于date类+time类.
除date类和time类的相同 *** 作外,还有以下特性:
datetime.now() # 获取当前时间,使用当前日期和时间构造对象,无参数,返回当前的日期和时间。 datetime.utcnow() # 获取当前时间,使用当前日期和时间构造对象,无参数,返回当前的UTC(时间标准时间)日期和时间。 d = date(2021,1,21) t = time(8,24,24) datetime.combine(date,time) # 使用date和time构造对象,传入参数为1个date对象和1个time对象,返回计算出的日期。 datetime.astimezone(datetime.now()) # 返回日期中加入时区概念; date(2021,1,21) # 传入年月日 time(8,24,24) # 传入时分秒4. timedelta类:
用来计算二个datetime对象时间差值,等同于sql的datediff ,以及date类的__sub__,__rsub__方法(同1.3)
4.1 时间计算import datetime datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) import datetime day = datetime.datetime.now() ddelay = datetime.timedelta(days=1) wdelay = datetime.timedelta(weeks = 5) ydelay = datetime.timedelta(weeks = 56) print(day) print(day - ddelay) # 一天前的时间 print(day + ddelay) # 一天后的时间 print(day - wdelay) # 5 周前 print(day + wdelay) # 5 周后 print(day - ydelay) # 一年前 print(day + ydelay) # 一年后 #输出: 2020-11-04 15:11:37.241980 2020-11-03 15:11:37.241980 2020-11-05 15:11:37.241980 2020-09-30 15:11:37.241980 2020-12-09 15:11:37.241980 2019-10-09 15:11:37.241980 2021-12-01 15:11:37.241980二、import calendar
calendar主要用于日历获取、闰年判断等;
import calendar calendar.month(2020, 11) # 获取某月日历:calendar.month calendar.leapdays(2016,2019) # 返回在Y1,Y2两年之间(计头不计尾)的闰年总数。 calendar.isleap(2008) # 判断是否闰年 calendar.calendar(2022,30,1,1,1) # 打印某年日历 没啥用 calendar.monthrange(2022, 1) # 返回月份第一天的星期以及天数 (5, 30) #(5, 30)解释: #5 表示 2014 年 11 月份的第一天是周六 #30 表示 2014 年 11 月份总共有 30 天 calendar.weekday(2022,1,21) # 返回某天是周几 从0开始三、import time
主要用于获取当前时间, 字符串日期转换等,和datetime的time类基本一致;
import time time.time() # 时间戳 time.mktime(time.localtime()) # 时间戳 time.struct_time(time.localtime()) # 时间元组:struct_time time.localtime(time.time()) # 时间元组:struct_time #输出: time.struct_time(tm_year=2020, tm_mon=11, tm_mday=4, tm_hour=11, tm_min=25, tm_sec=46, tm_wday=2, tm_yday=309, tm_isdst=0) time.asctime() # 获取格式化时间 as ctime 'Tue Jan 18 15:38:57 2022' time.strftime() # 时间/字符串 转换 time.strptime() # 字符串转时间 time.localtime() time.strptime("2022-01-21","%Y-%m-%d") time.strftime("%Y-%m-%d",db) time.strftime("%Y+%m+%d")结束语
时间插曲到此结束,基本熟练能满足90以上的时间处理需求,希望对大家有帮助。
希望本文有大家有帮助, 如有错误,欢迎指正。
本文地址:https://blog.csdn.net/weixin_41613094/article/details/122651561
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)