返回

每日一题:计算指定日期在一年中的第几天(简单)

后端

引言

在我们的日常生活中,经常需要对日期进行处理,例如计算两个日期之间的天数、判断某个日期是星期几、计算指定日期在一年中的第几天等等。本文将以Python语言为例,向大家展示如何计算指定日期在一年中的第几天。

算法步骤

  1. 首先,我们需要从字符串中提取出年、月、日三个字段。我们可以使用split()方法来实现。split()方法可以将一个字符串按照指定的分隔符进行分割,并返回一个列表。例如,下面的代码将字符串"2023-02-15"按照"-"分隔,并返回一个列表["2023", "02", "15"]。
date_str = "2023-02-15"
year, month, day = date_str.split("-")
  1. 接下来的步骤是计算指定日期是当年的第几天。闰年有366天,平年有365天。闰年的判断规则是:如果年份是4的倍数,并且不是100的倍数,或者年份是400的倍数,那么该年份就是闰年。我们可以使用下面的代码来判断年份是否为闰年:
def is_leap_year(year):
  if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
    return True
  else:
    return False
  1. 如果指定日期是闰年,那么计算方法如下:
days_in_year = 366
  1. 如果指定日期是平年,那么计算方法如下:
days_in_year = 365
  1. 最后,我们需要计算指定日期是当年的第几天。我们可以使用下面的代码来实现:
day_of_year = 0
for i in range(1, int(month)):
  if i in [1, 3, 5, 7, 8, 10, 12]:
    day_of_year += 31
  elif i in [4, 6, 9, 11]:
    day_of_year += 30
  else:
    if is_leap_year(int(year)):
      day_of_year += 29
    else:
      day_of_year += 28
day_of_year += int(day)
  1. 最后,我们将打印出计算结果:
print(f"指定日期在一年中的第{day_of_year}天")

完整代码

def calculate_day_of_year(date_str):
  year, month, day = date_str.split("-")

  def is_leap_year(year):
    if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
      return True
    else:
      return False

  if is_leap_year(int(year)):
    days_in_year = 366
  else:
    days_in_year = 365

  day_of_year = 0
  for i in range(1, int(month)):
    if i in [1, 3, 5, 7, 8, 10, 12]:
      day_of_year += 31
    elif i in [4, 6, 9, 11]:
      day_of_year += 30
    else:
      if is_leap_year(int(year)):
        day_of_year += 29
      else:
        day_of_year += 28
  day_of_year += int(day)

  return day_of_year

date_str = input("请输入日期(格式:YYYY-MM-DD):")
day_of_year = calculate_day_of_year(date_str)
print(f"指定日期在一年中的第{day_of_year}天")

运行结果

请输入日期(格式:YYYY-MM-DD):2023-02-15
指定日期在一年中的第46天