21xrx.com
2024-12-23 03:32:48 Monday
登录
文章检索 我的文章 写文章
C语言计算两个日期之间的差值
2023-06-17 04:19:34 深夜i     --     --
C语言 日期计算 Gregorian

C语言作为一门广泛应用于各个领域的编程语言,其在日期计算上也有着很强的实用性。本文将介绍如何使用C语言计算两个日期之间的差值,并且给出了一个基于Gregorian calendar的具体实现方法。

要实现两个日期之间的差值计算,我们需要先将其转换为天数,然后再进行相减操作。所以需要先定义一个函数,将日期转换为天数。以Gregorian calendar为例,其计算公式为:

- 非闰年的天数为:365 * year + day

- 闰年的天数为:366 * year + day

其中年份为4的倍数的年份为闰年。接下来我们可以定义以下函数:


int isLeapYear(int year) {

  if (year % 400 == 0) return 1;

  if (year % 100 == 0) return 0;

  if (year % 4 == 0) return 1;

  return 0;

}

int dayOfYear(int year, int month, int day) {

  int sum = 0, i;

  for (i = 1; i < month; i++) {

    switch (i) {

      case 1:

      case 3:

      case 5:

      case 7:

      case 8:

      case 10:

      case 12: sum += 31; break;

      case 4:

      case 6:

      case 9:

      case 11: sum += 30; break;

      case 2: sum += isLeapYear(year) ? 29 : 28; break;

    }

  }

  return sum + day;

}

int daysInYear(int year, int month, int day) {

  int i, sum = 0;

  for (i = 1; i < year; i++) sum += isLeapYear(i) ? 366 : 365;

  sum += dayOfYear(year, month, day);

  return sum;

}

通过以上函数,我们可以得到两个日期在各自年份的天数,从而计算出它们的实际天数差。具体实现请看以下代码:


#include

int isLeapYear(int year) {

  if (year % 400 == 0) return 1;

  if (year % 100 == 0) return 0;

  if (year % 4 == 0) return 1;

  return 0;

}

int dayOfYear(int year, int month, int day) {

  int sum = 0, i;

  for (i = 1; i < month; i++) {

    switch (i) {

      case 1:

      case 3:

      case 5:

      case 7:

      case 8:

      case 10:

      case 12: sum += 31; break;

      case 4:

      case 6:

      case 9:

      case 11: sum += 30; break;

      case 2: sum += isLeapYear(year) ? 29 : 28; break;

    }

  }

  return sum + day;

}

int daysInYear(int year, int month, int day) {

  int i, sum = 0;

  for (i = 1; i < year; i++) sum += isLeapYear(i) ? 366 : 365;

  sum += dayOfYear(year, month, day);

  return sum;

}

int main(int argc, char const *argv[]) {

  int y1, m1, d1, y2, m2, d2, days;

  printf("请输入第一个日期(yyyy mm dd):");

  scanf("%d %d %d", &y1, &m1, &d1);

  printf("请输入第二个日期(yyyy mm dd):");

  scanf("%d %d %d", &y2, &m2, &d2);

  if (y2 > y1 || (y2 == y1 && daysInYear(y2, m2, d2) >= daysInYear(y1, m1, d1))) {

    days = daysInYear(y2, m2, d2) - daysInYear(y1, m1, d1);

    printf("两个日期之间的差为:%d天\n", days);

  } else {

    printf("第二个日期不能早于第一个日期!\n");

  }

  return 0;

}

使用以上代码,我们就可以实现日期差的计算功能。 calendar。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复