python datetime 应用题

这篇博客介绍了如何利用Python的datetime模块进行日期处理,包括避免手动处理闰年的进位问题。作者通过创建一个日期列表并使用二分查找算法寻找下一个日月年回文日期。代码实现了一个功能,输入日期后输出下一个回文日期,适用于从0001年到9999年的日期范围。
摘要由CSDN通过智能技术生成

datetime提供了一系列方便的日期计算工具,可以处理许多时日期相关的计算。
(当然关键是避免手动处理闰年的进位问题)

代码提交地址:http://acm.zjnu.edu.cn/CLanguage/contests/1170/problems/1003.html
在这里插入图片描述

import datetime as dt
import bisect

'''
@Source: myself
@Author: Tieway59
@Description: 输入一个'%d.%m.%Y.'的日期,输出下一个日月年回文的日期。
     - strftime 表示时间格式化字符串
     - strptime 表示模式匹配读入时间
     - datetime.timedelta(days=1) 表示设定一个时间变化量,可以用来加减
     - bisect.bisect_left 二分查找第一个大于等于x的下标
%y	两位数的年份表示(00-99)
%Y	四位数的年份表示(0001-9999)
%m	月份(01-12)
%d	月内中的一天(0-31)
%H	24小时制小时数(0-23)
%I	12小时制小时数(01-12)
%M	分钟数(00=59)
%S	秒(00-59)
%a	本地简化星期名称
%A	本地完整星期名称
%b	本地简化的月份名称
%B	本地完整的月份名称
%c	本地相应的日期表示和时间表示
%j	年内的一天(001-366)
%p	本地A.M.或P.M.的等价符
%U	一年中的星期数(00-53)星期天为星期的开始
%w	星期(0-6),星期天为星期的开始
%W	一年中的星期数(00-53)星期一为星期的开始
%x	本地相应的日期表示
%X	本地相应的时间表示
%Z	当前时区的名称
%%	%号本身
'''
'''

s = dt.datetime.strptime('01.01.0001.', '%d.%m.%Y.')
# t = dt.datetime.strptime('31.12.9999.', '%d.%m.%Y.')
# d = dt.timedelta(days=1)
l = [...] # 打表

# def ispal(p) -> bool:
#     return p == p[::-1]
#
#
# while cur < t:
#     if ispal(cur.strftime('%d%m%Y')):
#         l.append((cur - s).days)
#     cur = cur + d

ans = []
n = int(input().strip())
for i in range(0, n):
    x = (dt.datetime.strptime(input().strip(), '%d.%m.%Y.') - s).days
    d = bisect.bisect_left(l, x + 1)
    ans.append((s + dt.timedelta(days=l[d])).strftime('%d.%m.%Y.'))

print('\n'.join(ans))

'''
1
02.02.2020.

2
01.01.1000.
31.12.2026.

3
01.01.0100.
05.07.0321.
05.05.0505.
'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值