You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python编写无需datetime库的出生日期存活天数计算程序

不使用datetime库实现存活天数计算方案

核心逻辑说明

  • 首先实现闰年判断:满足以下两个条件之一即为闰年:
    1. 年份能被4整除但不能被100整除
    2. 年份能被400整除
  • 定义平年、闰年的月份天数列表,直接查表获取每个月的天数
  • 编写工具函数计算指定日期是当年的第多少天
  • 计算两个日期的总天数差,即为存活天数

完整代码实现

# 辅助函数:判断是否为闰年
def is_leap_year(year):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    return False

# 辅助函数:计算日期是当年的第几天
def calc_day_of_year(year, month, day):
    # 平年各月天数
    month_days = [31,28,31,30,31,30,31,31,30,31,30,31]
    if is_leap_year(year):
        month_days[1] = 29 # 闰年2月加1天
    total = 0
    # 累加之前月份的所有天数
    for i in range(month - 1):
        total += month_days[i]
    # 加上当前月的天数
    total += day
    return total

# 原有逻辑修改扩展
date_of_birth = input("请输入出生日期 (格式为YYYY/MM/DD):")
now_date = "2021/09/11" # 固定当前日期,如需动态可以自行修改

# 1. 基础格式校验
if len(date_of_birth) != 10 or date_of_birth[4] != '/' or date_of_birth[7] != '/':
    print("输入的日期格式无效,请按照YYYY/MM/DD格式输入")
else:
    # 2. 转成整数类型的年月日
    try:
        birth_y = int(date_of_birth[0:4])
        birth_m = int(date_of_birth[5:7])
        birth_d = int(date_of_birth[8:10])
        now_y = int(now_date[0:4])
        now_m = int(now_date[5:7])
        now_d = int(now_date[8:10])
    except:
        print("日期包含非数字内容,输入无效")
        exit()

    # 3. 日期合法性校验
    month_days = [31,29 if is_leap_year(birth_y) else 28,31,30,31,30,31,31,30,31,30,31]
    if birth_m <1 or birth_m >12:
        print("输入的月份无效")
        exit()
    if birth_d <1 or birth_d > month_days[birth_m-1]:
        print("输入的日期天数无效")
        exit()
    if (birth_y, birth_m, birth_d) > (now_y, now_m, now_d):
        print("出生日期不能晚于当前日期")
        exit()

    # 4. 核心计算存活天数
    total_days = 0
    # 情况1:出生年份和当前年份不同
    if birth_y < now_y:
        # 先算出生当年剩余的天数
        if is_leap_year(birth_y):
            total_days += 366 - calc_day_of_year(birth_y, birth_m, birth_d)
        else:
            total_days += 365 - calc_day_of_year(birth_y, birth_m, birth_d)
        # 加上中间完整年份的总天数
        for y in range(birth_y + 1, now_y):
            total_days += 366 if is_leap_year(y) else 365
        # 加上当前年份已经过的天数
        total_days += calc_day_of_year(now_y, now_m, now_d)
    # 情况2:出生年份和当前年份相同
    else:
        total_days = calc_day_of_year(now_y, now_m, now_d) - calc_day_of_year(birth_y, birth_m, birth_d)
    
    print(f"从出生日期到2021/09/11一共存活了 {total_days} 天")

补充说明

  • 代码在原有长度校验的基础上补充了分隔符校验、内容合法性校验、月份天数边界校验,避免无效输入
  • 所有逻辑完全自主实现,没有调用datetime等第三方时间库,符合需求
  • 如果需要动态获取当前日期,不需要改核心计算逻辑,只需要修改now_date变量的赋值即可

内容的提问来源于stack exchange,提问作者1JM_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:30:04