在 python 中计算到你下一个生日的天数

新手上路,请多包涵

在上面的代码中,我想计算到下一个生日的天数,但输出是错误的。应该是什么:我的生日:2002 年 2 月 20 日 => 我生日前 203 天(今天是 2018 年 7 月 31 日)实际是什么:输入:2002 年 2 月 20 日 => 179 天

我的代码:

 import datetime

def get_user_birthday():
    year = int(input('When is your birthday? [YY] '))
    month = int(input('When is your birthday? [MM] '))
    day = int(input('When is your birthday? [DD] '))

    birthday = datetime.datetime(year,month,day)
    return birthday

def calculate_dates(original_date, now):
    date1 = now
    date2 = datetime.datetime(now.year, original_date.month, original_date.day)
    delta = date2 - date1
    days = delta.total_seconds() / 60 /60 /24

    return days

def show_info(self):
    pass

bd = get_user_birthday()
now = datetime.datetime.now()
c = calculate_dates(bd,now)
print(c)

原文由 Ethan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 515
2 个回答

几个问题:

  1. 年份必须指定为完整的整数,即 2002,而不是 02(或 2)。
  2. 您需要检查今年的生日是否已过。

以下是纠正这两个问题的解决方案。根据您输入的日期 20-Feb-2002 和今天的日期 31-Jul-2018,您的下一个生日是 203 天后。

此外,请注意,您可以使用 timedelta 对象的 days 属性,它将向下舍入到 203 天并避免小数精度。

 from datetime import datetime

def get_user_birthday():
    year = int(input('When is your birthday? [YY] '))
    month = int(input('When is your birthday? [MM] '))
    day = int(input('When is your birthday? [DD] '))

    birthday = datetime(2000+year,month,day)
    return birthday

def calculate_dates(original_date, now):
    delta1 = datetime(now.year, original_date.month, original_date.day)
    delta2 = datetime(now.year+1, original_date.month, original_date.day)

    return ((delta1 if delta1 > now else delta2) - now).days

bd = get_user_birthday()
now = datetime.now()
c = calculate_dates(bd, now)

print(c)

When is your birthday? [YY] 02
When is your birthday? [MM] 02
When is your birthday? [DD] 20

113

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

想想你的 calculate_dates 函数在做什么。

你在获取你的生日,然后查看当前时间距离当年的那个生日有多远。因此,您正在做的是找出 当年 您生日的天数,无论它是否已经过去。

例如,假设你的生日是 2 月 20 日。您的 date2 将是 2018-2-20 而不是 2019-2-20

您可以通过检查今年是否已经过了这一天来解决此问题。

原文由 Ziyad Edher 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题