算法用C語言實現(xiàn)。
- #include <REG52.H>
- #include <stdio.h>
- /*
- 菜農(nóng)星期算法
- 返回值:星期 對7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
- c:世紀-1,如2022年是21世紀,c取值20
- y:年,取后兩位數(shù)。如2022年,y取值22
- m:月
- d:日
- */
- unsigned char getweek(unsigned char c, unsigned char y, unsigned char m, unsigned char d)
- {
- if (m <= 2)//1,2月變?yōu)槿ツ甑?3,14月
- {
- if(0==y)
- {
- y = 99;
- if (0==c)
- c = 99;
- else
- c --;
- }
- else
- y --;
- m |= 4;//1,2月查5,6月表
- }
- /*
- 菜農(nóng)星期算法
- 星期=(百年%4*5+年+年/4+(13*月+8)/5+日)%7
- */
- return ((c & 3) * 5 + y + (y >> 2) + (13 * m + 8) / 5 + d) % 7;
- }
- void main (void)
- {
- //Setup the serial port for 1200 baud at 16MHz.
- SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
- TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
- TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */
- TR1 = 1; /* TR1: timer 1 run */
- TI = 1; /* TI: set TI to send first char of UART */
- printf("20220418 week=%bd\n",getweek(20, 22, 4, 18));
- while(1){
- }
- }
復制代碼
|