第二节 Python日期问题

一、datetime库详解

datetime 库以类的方式提供多种日期和时间表达方式。
(1) datetime.date:日期表示类,可以表示年、月、日等。
(2) datetime.time:时间表示类,可以表示小时、分钟、秒、毫秒等。
(3) datetime.dateime:日期和时间表示的类,功能覆盖 date 和 time 类。
(4) datetime.timedelta: 与时间间隔有关的类。
(5) datetime.tzinfo:与时区有关的信息表示类。

# (0)导入模块
from datetime import datetime,timedelta,tzinfo
from datetime import *  #直接导入全部

# (1)传入日期 最多可传入7个元素,即可到微秒。
dt1 = datetime(1901,1,1)
dt2 = datetime(2000,12,31)

# (2)求某个日期是星期几
print(dt1.weekday())
#根据日期计算星期后返回 0~6,对应星期一到星期日
print(dt1.isoweekday())  
#根据日期计算星期后返回 1~7,对应星期一到星期日

# (3)求两个日期之间相差多少天
td = dt2 - dt1

# (4)求两个日期之间相隔多少个星期
print(td.days//7)

# (5) 求日期对象的年(year),月(month),日(day),时(hour),分(minute),秒(second),微秒(microsecond)
print(dt1.year)
# (6)将日期转化为字符串
import datetime
dt=datetime.datetime(2006, 11, 21, 16, 30)
dt.strftime("%Y-%m-%d %H:%M")
'2006-11-21 16:30'
  -
dt1 = datetime(2022,1,1)
s = f"%02d%02d%02d"%(dt1.year,dt1.month.dt1.day)

# (7)将字符串转化为日期(datetime类型)
from datetime import datetime
date1 = "2022.05.11 13:30:00"
date1 = datetime.strptime(date1, "%Y.%m.%d %H:%M:%S")
print(" date1:", date1)
print(" 日期的类型是: %s"%type(date1))
   - - -
date=input()  #20200202  纯字符串格式
y=int(date[0:4]) # 将输入的日期转化为年月日的形式
m=int(date[4:6])
d=int(date[6:])
dd=datetime.date(y,m,d) # 将y,m,d转化为日期格式

# (8)增加或减少天数(days)、小时数(hours)等,计算昨天的日期,半年后的日期等。
from datetime import timedelta
dt1 = datetime(2022, 5, 12, 8, 30, 0)
dt2 = dt1 + timedelta(days = 1) #在原有时间上增加1天;
dt3 = dt1 + timedelta(minutes = -30) #在原有时间上减少30分钟
dt1 += timedelta(days=1,hours=1,minutes=30,seconds=30,microseconds=30) #没有years

# (9)日期题通常需要转化为字符串,进行进一步操作
#将日期转化为字符串,并将'-'去掉
y,m,d = 2023,4,3
date = datetime.date(y,m,d)
print(date)     #2023-04-03
str_date = str(date).replace('-','') 
print(str_date) #20230403

# (10)判断日期是否合法
#try方法
try:
    a=datetime.date(2021,2,29)
    print('yes')
except:
    print('no')
#判断大小月
day = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
m, d = int(input()), int(input())
print('yes' if m <= 12 and d <= day[m] else 'no')

二、习题

(1)题目:星期一

http://oj.ecustacm.cn/problem.php?id=1360

2018年省赛,填空题

题目描述
整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?
题目分析:
EXCEL 求解 或者 Python 的 datetime库求解

from datetime import *
dt1 = datetime(1901,1,1)
dt2 = datetime(2000,12,31)
print(dt1.weekday())  #打印出1,表示周二。  
td = dt2 - dt1        #注意:周一是0,周日是6
print(td.days//7)            

(2)题目: 顺子日期

2022年省赛,填空题

题目描述
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。
顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。
例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。
小明想知道在整个 2022 年份中,一共有多少个顺子日期?

from datetime import *
dt1 = datetime(2022,1,1)
cnt = 0
#判断是否是闰年:年份是4或者400的倍数,闰年有366天,故2022不是闰年。
for i in range(366):
    s = f"%d%02d%02d"%(dt1.year,dt1.month,dt1.day) #月份和日保留两位小数-3月2日:0302
    dt1+=timedelta(days=1)  #下一天
    if "012" in s or "123" in s or"234" in s or"345" in s 
    or "456" in s or "567" in s or "789" in s:
        cnt+=1
print(cnt)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值