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)
相关推荐
24kHT1 小时前
tensorboard——SummaryWriter
python
高洁011 小时前
数据可视化实战:用AI工具制作专业数据分析图表
人工智能·python·深度学习·信息可视化·transformer
夏星印2 小时前
argparse解析器参数详解
经验分享·笔记·python·学习·argparse
鬓戈3 小时前
SeaweedFS集群上文件遍历和删除
运维·python
小璐资源网3 小时前
C++中如何正确区分`=`和`==`的使用场景?
java·c++·算法
N1_WEB3 小时前
HDU:杭电 2018 复试真题汇总
算法
AMoon丶3 小时前
C++模版-函数模版,类模版基础
java·linux·c语言·开发语言·jvm·c++·算法
We་ct3 小时前
LeetCode 79. 单词搜索:DFS回溯解法详解
前端·算法·leetcode·typescript·深度优先·个人开发·回溯
眼眸流转4 小时前
LeetCode热题100(四)
算法·leetcode·职场和发展