跟大家分享一个非常精简的夏令时转换程序,程序是通用的可以在51、430、PIC、瑞萨系列的单片机上使用

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值