公元纪年的来历 公元是“公历纪元”的简称,是国际通行的纪年体系。以传说中耶稣基督的生年为公历元年(相当于中国西汉平帝元年)。
由于公元纪年的起点是公元1年,而没有“公元0年”,所以大多数对公元纪年有充分了解的科学家和世界上大多数权威天文机构,都明确支持21世纪始于2001年的说法。
公元1年1月1日是星期一。因此我们可以用某天的年月日推算出这一天是星期几(WEEKDAY)。
typedef unsigned long ULONG;
typedef unsigned int UINT;
/*
参数输出:1~7 对应星期一至星期天
*/
typedef unsigned long ULONG;
typedef unsigned int UINT;
int GetWeekDay(int nYear, int nMonth, int nDay)
{
ULONG lWeekDay = 0; //要返回的weekday
ULONG lYear = nYear;
ULONG lMonth = nMonth;
ULONG lDay = nDay;
ULONG lDayCount = 0 ; //从1月1日到上月底的累计天数
UINT uArrMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
for(unsigned int i=0;i<(lMonth-1);++i)
lDayCount += uArrMonth[i];
if ( nMonth > 2)
{
if ( ( (lYear%4 == 0) && (lYear%100 != 0 ) ) || (lYear%400 == 0) ) //计算闰年
++lDayCount ;
}
lWeekDay = ((lYear-1)*365 + (lYear-1)/4 - (lYear-1)/100 + (lYear-1)/400 + lDayCount + lDay )%7;
if (lWeekDay==0) //
lWeekDay = 7; //星期几
return (int)lWeekDay;
}
其实不需用long数据类型来计算,完全可以采用int型。但用了long型可以保证到一百万年后,该函数仍然正确。