高中生
最后登录1970-1-1
在线时间 小时
注册时间2018-10-15
|
本帖最后由 若语海洋 于 2019-1-17 14:53 编辑
之前用野火霸道开发板的时候发现,日期设置为1月份,转出来的时间戳是负数,然后用DEVC++测试了一下逻辑,发现还是这个问题,在网上搜索了一波关于Linux mktime 的算法解析,输入的1月份在程序里是上一年的11月,2月份是上一年的12月,为什么月份设置为2转出来的时间戳不会有这种问题呢?
DEV中的代码如下,可直接测试逻辑。求各路大佬翻牌
#include <stdio.h> /* printf, scanf */
#include <string.h>
unsigned int mktimev(unsigned char DP[]);
unsigned int mktimev(unsigned char DP[])
{
unsigned int temp = 2000+DP[0];
if (0 >= (int) (DP[1] -= 2)) { /* 1..12 -> 11,12,1..10 */
DP[1] += 12; /* Puts Feb last since it has leap day */
temp -= 1;
}
return (((
(unsigned int) (temp/4 - temp/100 +temp/400 + 367*DP[1]/12 + DP[2]) +
temp*365 - 719499
)*24 + DP[3] /* now have hours */
)*60 + DP[4] /* now have minutes */
)*60 + DP[5]; /* finally seconds */
}
int main()
{
unsigned int chuo;
unsigned char DataPackg[7];
DataPackg[0] = 18;
DataPackg[1] = 1;
DataPackg[2] = 7;
DataPackg[3] = 16;
DataPackg[4] = 9;
DataPackg[5] = 12;
DataPackg[6] = 20;
chuo = mktimev(DataPackg)-28800;
printf("%d",chuo);
}
|
|