You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "yxt.h"
int getWeekDay(int year, int month, int day);
int daysBetweenGivenDateAndNow(int year,int month,int day);
int dijitian(int year,int month,int day);
int isLeapYear(int year);
int getDaysInMonth(int year, int month);
int calculateTotalDays(int year, int month, int day);
void wang(int year,int month,int day)
{
int result ;
result = isHoliday(year, month, day);
switch (result)
{
case 1:
printf("元旦\n");
break;
case 2:
printf("中国人民警察节\n");
break;
case 3:
printf("妇女节\n");
break;
case 4:
printf("植树节\n");
break;
case 5:
printf("清明节\n");
break;
case 6:
printf("劳动节\n");
break;
case 7:
printf("青年节\n");
break;
case 8:
printf("护士节\n");
break;
case 9:
printf("全国科技工作者日\n");
break;
case 10:
printf("儿童节\n");
break;
case 11:
printf("中国人民解放军建军节\n");
break;
case 12:
printf("中国医师节\n");
break;
case 13:
printf("教师节\n");
break;
case 14:
printf("国庆节\n");
break;
case 15:
printf("记者节\n");
break;
case 16:
printf("二七纪念日\n");
break;
case 17:
printf("全民国家安全教育日\n");
break;
case 18:
printf("中国航天日\n");
break;
case 19:
printf("中国品牌日\n");
break;
case 20:
printf("全民防灾减灾日\n");
break;
case 21:
printf("中国旅游日\n");
break;
case 22:
printf("中国助残日\n");
break;
case 23:
printf("五州纪念日\n");
break;
case 24:
printf("环境日\n");
break;
case 25:
printf("文化和自然遗产日\n");
break;
case 26:
printf("全国土地日\n");
break;
case 27:
printf("七七抗战纪念日\n");
break;
case 28:
printf("中国航海日\n");
break;
case 29:
printf("全名健身日\n");
break;
case 30:
printf("全民生态日\n");
break;
case 31:
printf("残疾预防日\n");
break;
case 32:
printf("中国人民抗日战争胜利纪念日\n");
break;
case 33:
printf("中华慈善日\n");
break;
case 34:
printf("九一八纪念日\n");
break;
case 35:
printf("全民国防教育日\n");
break;
case 36:
printf("烈士纪念日\n");
break;
case 37:
printf("国家扶贫日\n");
break;
case 38:
printf("全国交通安全日\n");
break;
case 39:
printf("国家宪法日和全国法制宣传日\n");
break;
case 41:
printf("南京大屠杀死难者国家公祭日\n");
break;
case 42:
printf("圣诞节\n");
break;
case 0:
printf("该日期不是节假日\n");
break;
default:
printf("未知的节日\n");
break;
}
}
int dijitian(int year,int month,int day)
{
int a[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int sumdays = 0;
//判断是否为闰年
if ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0) {
a[1] = 29;
}
// 检查输入的日期是否合法
if (month < 1 || month > 12 || day < 1 || (day >a[month - 1])) {
printf("输入的日期不合法\n");
return -1;
}
// 计算总天数
int i=0;
while( i < month - 1)
{
sumdays += a[i];
i++;
}
printf("%d年%d月%d日是该年的第%d天。\n", year, month, day, sumdays);
return sumdays;
}
// 判断是否为闰年闰年返回1平年返回0
int isLeapYear(int year) {
return ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0);
}
// 获取对应月份的天数
int getDaysInMonth(int year, int month) {
int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (month == 2 && isLeapYear(year)) {
return 29;
}
return days[month];
}
// 计算从公元1年1月1日到给定日期的总天数
int calculateTotalDays(int year, int month, int day) {
int totalDays = 0;
int y,m;
for ( y = 1; y < year; y++) {
totalDays += isLeapYear(y)? 366 : 365;
}
for ( m = 1; m < month; m++) {
totalDays += getDaysInMonth(year, m);
}
totalDays += day;
return totalDays;
}
// 计算给定日期与当前日期的天数差
int daysBetweenGivenDateAndNow(int year, int month, int day) {
time_t currentTime;
struct tm* currentDate;
time(&currentTime);
currentDate = localtime(&currentTime);
int currentYear = currentDate->tm_year + 1900;
int currentMonth = currentDate->tm_mon + 1;
int currentDay = currentDate->tm_mday;
int totalDaysGiven = calculateTotalDays(year, month, day);
int totalDaysCurrent = calculateTotalDays(currentYear, currentMonth, currentDay);
return totalDaysCurrent - totalDaysGiven;
}