哎呀,你说是不是很淡腾?一个时间非得搞到7-8个字节才表示出来,真是我乐个去呀! 20150430154410 这个时间好长一串哦,字节少了还表示不了。怎么办呢? 传说中的UTC来了,哎哟,什么UTC?不是RTCk吗? 。。。 UTC是从1970-1-1开始计时的,俺们都是中国人,东8区是不? 那就是1970-1-1 8点开始计时的吧? 废话不说了,反正就是UTC用一个32位字节表示时间,是从1970-1-1 8点开始到某一时间点的总秒数。 一看好像郁闷了,电脑上好整呀,一个转换就过去了,单片机上咋搞? 先看一下思路吧: 1、UTC是总秒数,那么只要知道有多少天就可以了,因为每天的秒数是固定的 2、平年有365天,还有一个366天的年怎么办?还好还好,有闰年算法不是? UTC--->RTC 有时间的总秒数了,那么就可以得到天数,有了天数就可以计算出年数(注意闰年),多余的天数就在这一年中分配到月上去。 RTC--->UTC 有了年分,就可以得到年差,得到年差就可以得到年差上的秒数,(处理闰年),月分可以得到总天数计算出秒数。 |
if((y%4==0)&&((y%100!=0)||(y%400==0)))
{
这个就是闰年
}
time_t mktime ( int year, int mon,
int day, int hour,
int min, int sec)
{
if (0 >= (int) (mon -= 2)) { /* 1..12 -> 11,12,1..10 */
mon += 12; /* Puts Feb last since it has leap day */
year -= 1;
}
return (((
(unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
year*365 - 719499
)*24 + hour /* now have hours */
)*60 + min /* now have minutes */
)*60 + sec; /* finally seconds */
}