Python日期处理实战代码

日期统计

代码如下:

python 复制代码
import datetime
str_list = "5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3"
start = datetime.date(2023, 1, 1)
end = datetime.date(2023, 12, 31)
ans = 0
while start <= end:
    day = start.strftime('%Y%m%d')
    res = 0
    for i in range(len(str_list)):
        if res == 8:
            ans += 1
            break
        elif day[res] == str_list[i]:
            res += 1
    start += datetime.timedelta(days = 1)
print(ans)

日期问题

代码如下:

python 复制代码
import datetime

def main():
    s = input().strip()
    a, b, c = map(int, s.split('/'))
    ans = []
    #暴力枚举所有可能的日期
    for year in range(1960, 2060):
        for month in range(1, 13):
            for day in range(1, 32):#最多31天,不合法的让datetime报错
                try:
                    t = datetime.date(year, month, day)
                    if year % 100 == a and month == b and day == c:
                        ans.append(t)
                    elif year % 100== c and month == a and day == b:
                        ans.append(t)
                    elif year % 100 == c and month == b and day == a:
                        ans.append(t)
                except ValueError:#日期不合法,跳过
                    continue

    ans = set(ans)
    for x in sorted(ans):
        print(x.strftime("%Y-%m-%d"))

if __name__ == '__main__':
    main()

回文日期

代码如下:

python 复制代码
import datetime
n = int(input())
year = n // 10000
month = n % 10000 // 100
day = n % 100
t = datetime.date(year, month, day)
found_first = False
while True:
    #此时t的格式是"%Y-%m-%d"
    t += datetime.timedelta(days = 1)
    #将时间格式化为字符串格式
    #也可以写成d = t.strftime("%Y%m%d")
    d = str(t).replace('-', '')
    if d == d[::-1] and not found_first:
            found_first = True
            print(d)
    #注意这里是if,不是elif,如果写成elif会有一组数据无法通过(即当两种天是同一天的时候无法判断)
    if d[0] == d[2] == d[5] == d[7] and d[1] == d[3] == d[4] == d[6]:
        print(d)
        break

合法日期

python 复制代码
import datetime
m = int(input())
d = int(input())
try:
    t = datetime.date(2021, m, d)
    print("yes")
except ValueError:
    print("no")

顺子日期

代码如下:

python 复制代码
import datetime
num = 0
for month in range(1, 13):
    for day in range(1, 32):
        try:
            t = datetime.date(2022, month, day)
            str_t = t.strftime("%Y%m%d")
            if "012" in str_t or "123" in str_t:
                num += 1
        except ValueError:
            continue
print(num)

特殊日期(模拟赛)

代码如下:(运行时间较长但结果是对的)

python 复制代码
import datetime
start = datetime.date(1900, 1, 1)
end = datetime.date(9999, 12, 31)
ans = 0
while start < end:
    t = list(start.strftime("%Y%m%d"))
    sum1 = sum(map(int, t[0:4]))
    sum2 = sum(map(int, t[4:8]))
    if sum1 == sum2:
        ans += 1
    start += datetime.timedelta(days=1)
print(ans)

特殊日期

代码如下:

python 复制代码
def is_leap(year):
    return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

def month_day(year, month):
    if month in [4, 6, 9, 11]:
        return 30
    elif month == 2:
        return 29 if is_leap(year) else 28
    else:
        return 31

def solve():
    ans = 0
    for year in range(2000, 2000000):
        valid_month = [m for m in range(1, 13) if year % m == 0]
        for m in valid_month:
            valid_days = [d for d in range(1, month_day(year, m) + 1) if year % d == 0]
            ans += len(valid_days)
    print(ans + 1)

if __name__ == '__main__':
    solve()

日期格式

代码如下:

python 复制代码
day = ['a', 'Jan', 'Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
m, d = map(int, input().split())
month = day[m]
d_str = '0' + str(d) if len(str(d)) == 1 else str(d)
print(month, d_str, sep = '')

跑步

代码如下:

python 复制代码
import datetime

start = datetime.date(2022, 1, 1)
end = datetime.date(2022, 12, 31)
ans = 0
while start <= end:
    t_str = start.strftime("%Y%m%d")
    t = t_str[-1]
    if start.weekday() == 5 or start.weekday() == 6 or t == '1':
        ans += 1
    start += datetime.timedelta(days = 1)
print(ans)

一年中的第几天

代码如下:

python 复制代码
import datetime
while True:
    y, m, d = map(int, input().split())
    if y == 0 and m == 0 and d == 0:
        break
    start = datetime.date(y, 1, 1)
    end = datetime.date(y, m, d)
    ans = 0
    while start <= end:
        start += datetime.timedelta(days=1)
        ans += 1
    print(ans)
python 复制代码
import datetime
while True:
    y, m, d = map(int, input().split())
    if y == 0 and m == 0 and d == 0:
        break
    start = datetime.date(y, 1, 1)
    end = datetime.date(y, m, d)
    ans = (end - start).days + 1
    print(ans)

岁月流转

代码如下:

python 复制代码
import datetime
start = datetime.date(1901, 1, 1)
end = datetime.date(2000, 12, 31)
ans = 0
while start <= end:
    if start.weekday() == 6 and start.day == 1:
        ans += 1
    start += datetime.timedelta(days=1)
print(ans)

神奇的闹钟

代码如下:

python 复制代码
import datetime

t = int(input())
for _ in range(t):
    s = input().split()
    start = datetime.datetime(1970, 1, 1,0, 0, 0)
    #strptime() 要求格式字符串必须与待解析的字符串完全匹配,包括空格、分隔符等
    end = datetime.datetime.strptime(s[0] + s[1], '%Y-%m-%d%H:%M:%S')
    x = int(s[2])
    delta = end - start
    n = delta // datetime.timedelta(minutes = x)
    ans = (start + n * datetime.timedelta(minutes = x)).strftime('%Y-%m-%d %H:%M:%S')
    print(ans)

直接 print(ans) 的输出格式是固定的:YYYY-MM-DD HH:MM:SS,这恰好和题目要求的格式一致,所以看起来不需要转换。

为什么代码中要显式使用 strftime?

  1. 代码意图明确:明确表示要输出特定格式的字符串

  2. 格式可控:如果题目要求不同的格式(如没有空格),strftime 可以灵活调整

  3. 类型安全:确保输出的是字符串而不是对象

艺术与篮球

代码如下:

python 复制代码
import datetime
dic = [13, 1, 2, 3, 5, 4, 4, 2, 2, 2]
start = datetime.date(2000, 1, 1)
end = datetime.date(2024, 4, 13)
ans = 0
while start <= end:
    d_lst = list(map(int, start.strftime('%Y%m%d')))
    d_sum = 0
    for d in d_lst:
        d_sum += dic[d]
    if d_sum > 50:
        ans += 1
    start += datetime.timedelta(days=1)
print(ans)
相关推荐
FreakStudio12 分钟前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
SilentSamsara1 小时前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
zhoutongsheng1 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
智者知已应修善业2 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
.5482 小时前
## Sorting(排序算法)
python·算法·排序算法
ydmy3 小时前
注意力机制(个人理解)
pytorch·python·深度学习
wuweijianlove3 小时前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
子琦啊3 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
iwhitney4 小时前
【次方量化】3分钟搞懂什么是量化策略
python
高洁014 小时前
大模型部署资源不足?轻量化部署解决方案
python·深度学习·机器学习·数据挖掘·transformer