模板
#输入数字20211211,欲求年月日:【若字符串,则先转数字】
date=20211211
year=date//10000
month=date//100%100
day=date%100
'''
输入是字符串'2021-12-2',先去字符,再转int
date='2021-12-2'
d=str(date).replace('-','')
a=int(d)
'''
工具巧用:
计算器的日期模式
excel
小知识点
datetime(时间日期类型) 包括了date和time
timedelta(时间差类型)
tzinfo(时区 用不到)
datetime:表示日期和时间
import datetime
today=datetime.datetime(year=2022,month=12,day=4,hour=5,minute=1,second=1)
#日期
print(today)
print(today.year)
print(today.month)
#时间
print(today.hour)
print(today.now())
datetime.date() 只表示日期
datetime.time() 只表示时间
timedelta:表示日期
import datetime
today=datetime.datetime(year=2022,month=12,day=4)
delta=datetime.timedelta(days=2) #是datetime的timedelta里的
yes=today-delta
print(yes)
print(today)
习题
回文日期
回文日期
判断日期有效性最关键。
import datetime
a=input()
y=int(a)//10000
m=int(a)//100%100
d=int(a)%100
dd=datetime.date(year=y,month=m,day=d)
lst1=[]
lst2=[]
for i in range(10000101,89991231):
dd+=datetime.timedelta(days=1)
ddd=str(dd).replace('-','')
if ddd==ddd[::-1]:#判断回文
if lst1==[]:
lst1.append(ddd)
if ddd[:2]==ddd[2:4] and lst2==[]:#在回文中判断ABAB
lst2.append(ddd)
if lst1 and lst2:
print(lst1[0])
print(lst2[0])
break
主要练习了回文数(ABABBABA型的回文日期)和日期-字符串-数字间转换
yyyymmdd=str(dd).replace('-','')
合法日期
days=[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#闰年
def leap_year(y):
if (y%4==0 and y%100!=0) or y%400==0:
return True
else:
return False
def check(date):
year=int(date)//10000
month=int(date)//100%100
day=int(date)%100
if month==0 or month>=13 or day==0:return False
if month!=2 and day>days[month]:return False
if month==2:
leap=0 #初始为平年
if leap_year(y):leap==1 #为闰年,闰年2月29天
if day>28+leap:return False
return True
print(check(20201221))
获取某年 月里多少天
days=[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#闰年
def leap_year(y):
if (y%4==0 and y%100!=0) or y%400==0:
return True
else:
return False
def get(year,month):
leap=0
if leap_year(year):leap=1
if month!=2:return month[month]
else:return 28+leap
print(get(2020,2))
模板题:晨跑
包括:
计算某两天的相隔天数
某两天内星期一的个数
给定年月日求n天后对应的日期
import datetime
start = datetime.datetime(year=2022,month=1,day=1) # 定义头为2022.1.1
end = datetime.datetime(year=2023,month=1,day=1) # 尾为2023.1.1
cnt = 0 # 计数
while start != end: # 当没到下一年的时候,也就是遍历2022全年
if start.isoweekday() in [6,7] or start.day in [1,11,21,31]:
cnt += 1 # 小蓝每周六、周日都晨跑,每月的 1、11、21、31日也晨跑。
start += datetime.timedelta(days=1) # 下一天
print(cnt)