#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:gxay2000@126.com