|
|
#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(¤tTime);
|
|
|
currentDate = localtime(¤tTime);
|
|
|
|
|
|
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;
|
|
|
}
|