日期时间timedate

模板

#输入数字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)

excel解决日期问题
java版日期模板-待转化

习题

回文日期

回文日期
判断日期有效性最关键。

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值