学会了Python这个库,以后日期和时间问题都不用怕了 您所在的位置:网站首页 python学生类 学会了Python这个库,以后日期和时间问题都不用怕了

学会了Python这个库,以后日期和时间问题都不用怕了

2023-03-24 12:32| 来源: 网络整理| 查看: 265

日期和时间问题一直是枚举题的一大难点,因为它可以考察选手的编程能力。而日期和时间问题也是比较头疼的,这里提供一个解决日期和时间问题的一大利器——Python 的datetime库

(一)datetime库的介绍

Python的datetime库一般用于处理年、月、日、时、分、秒的统计、加减计算等需求。它集成了date类和time类。拥有大量的有效的成员方法和成员变量来帮助我们解决头疼的日期和时间的枚举问题。

datetime库总共有5个类,分别是:

datetime.date:表示日期的类datetime.datetime:表示日期时间的类datetime.time:表示时间的类datetime.timedelta:表示时间间隔datetime.tzinfo:时区的相关信息

根据目前的做题经验,解决日期和时间问题主要使用date类和datetime类,以及timedelta类。

导入datetime库import datetime dt = datetime.date(2019,8,26) #date类 dt=datetime.datetime(2021, 7, 5, 17, 58, 21, 359135) #datetime类 delta=datetime.timedelta(days=1)#timedelta类(二)日期的枚举——date类date类

用来描述日期

三个成员变量

date.year(年)、date.month(月)、date.day(日) #年的范围为1-9999,特别注意

常用的成员方法:

data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;(三)时间的枚举——datetime类(也可以用于日期的枚举但推荐使用date)

datatime既可以用于时间的处理也可以用于日期的枚举。

8个成员变量

datetime.year(年) datetime.month(月) datetime.day(日) datetime.hour(小时) datetime.minute(分钟) datetime.second(秒) datetime.microsecond(微秒) datetime.tzinfo

(四)日期的加减运算——timedelta类

8个成员变量

timedelta.days(日) timedelta.seconds(秒) timdelta.microseconds(微秒) timedelta.milliseconds(毫秒) timedelta.minutes(分钟) timedelta.hours(小时) timedelta.weeks(周)

(五)例题的应用

个人喜欢在使用datetime的使用使用死循环,当日期枚举结束后break掉

例题1:时间显示 蓝桥杯OJ1452

——时间问题:时间加减

蓝桥杯OJ1452import datetime T=int(input()) dt=datetime.datetime(1970,1,1) dt=dt+T*datetime.timedelta(milliseconds=1) print("{:0>2d}:{:0>2d}:{:0>2d}".format(dt.hour,dt.minute,dt.second)) 例题2:回文日期 蓝桥杯OJ498

——日期问题:日期枚举

蓝桥杯OJ498import datetime s=input() year=int(s[:4]) month=int(s[4:6]) day=int(s[6:]) dt=datetime.date(year,month,day) flag=True while True: dt+=datetime.timedelta(days=1) s="{}{:0>2d}{:0>2d}".format(dt.year,dt.month,dt.day) if s[:]==s[::-1]: if flag: print(s) flag=False if s[0]==s[2]==s[5]==s[7] and s[1]==s[3]==s[4]==s[6]: print(s) break 例题3:含2天数 蓝桥杯OJ1038

——日期问题:日期枚举

蓝桥杯OJ1038import datetime dt=datetime.date(1900,1,1) ans=0 while 1: s="{}{}{}".format(dt.year,dt.month,dt.day) if "2" in s: ans+=1 dt+=datetime.timedelta(days=1) if dt.year==9999 and dt.month==12 and dt.day==31: ans+=1 break print(ans)

例题4:跑步锻炼 蓝桥杯OJ597

——日期问题:日期枚举

跑步锻炼 OJ597import datetime dt=datetime.date(2000,1,1) ans=0 while True: ans+=1 if dt.isoweekday()==1 or dt.day==1: ans+=1 if dt.year==2020 and dt.month==10 and dt.day==1: break dt+=datetime.timedelta(days=1) print(ans)

例题5:顺子日期 蓝桥杯OJ2096

——日期问题:日期枚举

顺子日期 OJ2096import datetime dt=datetime.date(2022,1,1) count=0 while True: dates="{}{:0>2d}{:0>2d}".format(dt.year,dt.month,dt.day) if dates[:4]=="2023": break #print(dates) if "012" in dates or "123" in dates or "234" in dates or "345" in dates or "456" in dates or "567" in dates or "678" in dates or "789" in dates: count+=1 dt+=datetime.timedelta(days=1) print(count)

例题6:合法日期 蓝桥杯OJ541

——日期问题:日期枚举

合法日期 OJ541import datetime month=int(input()) day=int(input()) dt=datetime.date(2021,1,1) flag=True while True: if dt.month==month and dt.day==day: flag=False break dt+=datetime.timedelta(days=1) if dt.year==2022: break if not flag: print("yes") else: print("no")

怎么样,感觉到Python这个语言在日期问题上的巨大优势了吗

(七)日期模板

但是为了以防万一,有些时候datetime不一定能用,还是需要日期模板

#日期数组 days=[0,31,28,31,30,31,30,31,31,30,31,30,31] #判断闰年 def is_leap(year): if year%4==0 and year%100!=0 or year %400==0: return True return False #判断日期是否合法 def check_date(date): year=date//10000 #取前四个数字 month=date/100%100 #取五六个数字 day=date%100 #取最后两个数字 if month12: return False if day==0 or month!=2 and day>days[month]: return False if month==2: if is_leap(year): days[2]+=1 if day>days[2]: return False return True def get_days(year,month): if month==2: if is_leap(year) and days[2]==28: days[2]+=1 return days[2]+=1 else: return days[month]



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有