#include "reg52.h"
/*歐洲夏令時於以下日期的格林尼治標準時間1:00開始(時鐘提前一個小時):
2008年3月30日
2009年3月29日
2010年3月28日
2011年3月27日
用於計算歐洲夏令時開始時間的公式爲:
3月(31-(5y÷4+4) mod 7)日的1:00(格林尼治標準時間)
(至2099年有效)其中y指年份,而對於非負數a,a mod b表示將a和b截尾後,兩數相除所得的餘數。
歐洲夏令時於以下日期的格林尼治標準時間1:00結束(時鐘調後一個小時):
2008年10月26日
2009年10月25日
2010年10月31日
2011年10月30日
用於計算歐洲夏令時結束始時間的公式爲:
10月(31-(5y÷4+1) mod 7)日的1:00(格林尼治標準時間)
(至2099年有效)
*/
unsigned char DSTdatestart (unsigned int y)
{
unsigned char day;
day=(31-(5*y/4+4)%7);
return day;
}
unsigned char DSTdateend (unsigned int y)
{
unsigned char day;
day=(31-(5*y/4+1)%7);
return day;
}
void main (void)
{
unsigned int y=2010;
unsigned char day1,day2;
day1=DSTdatestart(y);
day2=DSTdateend(y);
while(1)
{
;
}
}
哈哈,是不是比較精簡啊,用Keil uVision3的編譯結果如下:
Program Size: data=11.0 xdata=0 code=214
"EuropeanDST" - 0 Error(s), 0 Warning(s).
到現在爲止我覺得我這個夏令時計算程序是非常精簡的,我還有一個夏令時計算的程序是前年編的,程序代碼非常的龐大,大家看了肯定會嚇暈過去,所以我不拿出來嚇人了。大家有什麼問題和建議可以發E-Mail:[email protected]