Python如何判断字符串格式日期是否处于指定字符串时间区间内
动物园参观日期判断实现方案
核心逻辑
- 所有日期仅对比月、日维度,年份统一使用
strptime默认的1900年即可,不影响区间判断结果 - 拆分不可访问时段字符串为起止日期对象,分两种场景判断:
- 起止日期同年:用户输入日期落在起止区间内即为不可访问
- 起止日期跨年(如11月到次年2月):用户输入日期大于等于开始日期,或小于等于结束日期即为不可访问
- 遍历所有动物,仅输出不在不可访问时段内的动物名称
完整可运行代码
from datetime import datetime def input_date(): while True: try: date = input("请输入您计划参观的日期 (格式DD/MM): ") pattern_date = '%d/%m' date = datetime.strptime(date, pattern_date) except ValueError: print("日期格式不合法,请重新输入") continue else: break return date def is_in_inaccessible_period(user_date, period_str): # 拆分不可访问时段字符串 start_str, end_str = period_str.split(' - ') date_format = '%d/%m' start_date = datetime.strptime(start_str, date_format) end_date = datetime.strptime(end_str, date_format) # 同年度时段判断 if start_date <= end_date: return start_date <= user_date <= end_date # 跨年度时段判断 else: return user_date >= start_date or user_date <= end_date # 动物类定义 class Animal: def __init__(self, species, inaccessible): self.species = species self.inaccessible = inaccessible bear = Animal("熊","01/10 - 30/04") # 原参数31/04为非法日期,已修正为4月30日 lion = Animal("狮子", "01/11 - 28/02") penguin = Animal("企鹅", "01/05 - 31/08") if __name__ == "__main__": date = input_date() all_animals = [bear, lion, penguin] # 筛选可访问动物 accessible_animals = [ani.species for ani in all_animals if not is_in_inaccessible_period(date, ani.inaccessible)] print("今日可参观的动物:") for ani in accessible_animals: print(f"- {ani}")
关键说明
- 原有代码中熊的不可访问时段写为
01/10 - 31/04,4月不存在31日属于非法日期,上述代码已修正为30/04 - 如果需要兼容闰年2月29日的特殊场景,可以额外增加2月29日的适配逻辑,当前方案默认遵循平年28日的规则
内容的提问来源于stack exchange,提问作者David Gallego
相关产品推荐
相关产品推荐

