输入一个日期(包括年月日),计算这天是这一年中的第几天。用C写
时间: 2024-10-21 10:15:01 浏览: 44
在C语言中,我们可以利用`mktime()`函数来将日期转换成时间戳,然后通过`difftime()`计算该日期距离年初的天数。以下是一个简单的示例程序:
```c
#include <stdio.h>
#include <time.h>
int getDayOfYear(int year, int month, int day) {
struct tm date = {0};
// 设置日期和时间
date.tm_year = year - 1900; // 从1900年开始计数
date.tm_mon = month - 1; // 月份从0开始计数
date.tm_mday = day;
date.tm_hour = 0;
date.tm_min = 0;
date.tm_sec = 0;
date.tm_isdst = -1; // 不处理夏令时
// 获取距离今年1月1日的秒数差
time_t t = mktime(&date);
// 计算总天数并返回
return (t / (60 * 60 * 24));
}
int main() {
int year, month, day;
printf("请输入日期(格式:YYYY-MM-DD): ");
scanf("%d-%d-%d", &year, &month, &day);
if(month < 1 || month > 12 || day < 1) {
printf("输入错误,请确保月份在1-12之间,日期在1-31之间。\n");
return 1;
}
int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 假设非闰年
if(is_leap_year(year)) { // 判断是否为闰年
days_in_month[1] = 29;
}
if(day > days_in_month[month - 1]) {
printf("输入的日期超出当月范围。\n");
return 1;
}
int total_days = 0;
for (int i = 0; i < month - 1; ++i) {
total_days += days_in_month[i];
}
total_days += day;
printf("这一天是一年的第%d天。\n", total_days);
return 0;
}
// 辅助函数判断是否为闰年
bool is_leap_year(int year) {
return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
}
阅读全文