以前虽然在PC上用过很多,但是对时间函数的复杂性还是估计不足…… 现在有一个任务如下: 把从RTC时钟(包含年月日时分秒)转换为time_t类型(往往就是long),这样便于存储、通信。 但是——这是需要在8位机完成的。 mktime()原本采用linux的源码: unsigned long mktime(const struct tm *TimeStr) { struct tm Tm; uint Year; memcpy((unsigned char *)&Tm,(unsigned char *)TimeStr,sizeof(Tm)); Year = Tm.year+2000; if (0 >= (int) (Tm.mon -= 2)) { /* 1..12 -> 11,12,1..10 */ Tm.mon += 12; /* Puts Feb last since it has leap day */ Year -= 1; }
return ((( (unsigned long) (Year/4 - Year/100 + Year/400 + 367*Tm.mon/12 + Tm.mday) + Year*365 - 719499 )*24 + Tm.hour /* now have hours */ )*60 + Tm.min /* now have minutes */ )*60 + Tm.sec; /* finally seconds */ } 虽然有点难以理解,但好在短小精悍。 localtime()就难办了,研究过这个函数的人都知道,无论是linux还是window,C库里都是一大堆文件纠缠在一起的,想要剥离出来很难…… 曾经花过半天时间从VC的CRT函数里提取,成功了,但是体积很庞大,且只能自己配对使用,和使用VC编译器本身的函数得到的结果截然不同!和linux得到的结果也截然不同!
现在想找一组能配对的localtime()和mktime()。望牛人们不吝赐教。 |