一、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)