|
计算星期几的C代码
static UCHAR ClkDay; /* Counters for local DATE */ static UCHAR ClkDOW; /* Day of week (0 is Sunday) */ static UCHAR ClkMonth; static UINT ClkYear;
typedef struct clk_month { UCHAR MonthDays; /* Number of days in each month */ char *MonthName; /* Name of the month */ UCHAR MonthVal; /* Value used to compute day of the week */ } CLK_MONTH;
static CLK_MONTH code ClkMonthTbl[] = { /* MONTHS TABLE */ {0, "", 0}, /* Invalid month */ {31, "January ", 6}, /* January */ {28, "February ", 2}, /* February (note leap years are handled by code) */ {31, "March ", 2}, /* March */ {30, "April ", 5}, /* April */ {31, "May ", 0}, /* May */ {30, "June ", 3}, /* June */ {31, "July ", 5}, /* July */ {31, "August ", 1}, /* August */ {30, "September ", 4}, /* September */ {31, "October ", 6}, /* October */ {30, "November ", 2}, /* November */ {31, "December ", 4} /* December */ };
/* ******************************************************************************** ************************* * COMPUTE DAY-OF-WEEK * * Description : This function computes the day of the week (0 == Sunday) based on the current month, * day and year. * Arguments : None. * Returns : None. * Notes : - This function updates ClkDOW. * - This function is called by ClkUpdateDate(). ******************************************************************************** ************************* */ #if CLK_DATE_EN static void ClkUpdateDOW (void) { UINT dow; dow = ClkDay + ClkMonthTbl[ClkMonth].MonthVal; if (ClkMonth < 3) { if (ClkIsLeapYear(ClkYear)) { dow--; } } dow += ClkYear + (ClkYear / 4); dow += (ClkYear / 400) - (ClkYear / 100); dow %= 7; ClkDOW = dow; } #endif |