黄小狼 发表于 2015-4-30 15:54:26

UTC时间转换

哎呀,你说是不是很淡腾?一个时间非得搞到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
有了年分,就可以得到年差,得到年差就可以得到年差上的秒数,(处理闰年),月分可以得到总天数计算出秒数。



黄小狼 发表于 2015-4-30 15:56:50

:lol自己来占楼啦,嘿嘿,主要是闰年的处理方法嘛。看一下,那个能被4除,不能被100除,能被400除的就是。
if((y%4==0)&&((y%100!=0)||(y%400==0)))
{
这个就是闰年
}

wu1169668869 发表于 2015-4-30 16:29:16

还是rtc方便一点

wu1169668869 发表于 2015-4-30 16:31:39

也算是一个内存和运算的矛盾

Mandelbrot_Set 发表于 2015-4-30 16:37:09

让我想起了这么个神奇的函数
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 */
}

dsjsjf 发表于 2015-4-30 21:55:44

我是来学习的

wambob 发表于 2015-4-30 22:11:13

学习一下,RTC就好
页: [1]
查看完整版本: UTC时间转换