C# · 12月 19, 2021

C语言编写 秒数转换成时间戳 UTC时间 函数实现

单片机中需要转换时间戳,没有现成的函数可以用,为了提高单片机的效率,写了一个,参考如下:

const int Days[12]={31,28,31,30,31};

void MainWindow::Calc_Time(unsigned long Second_data)

{

unsigned long Year = 1970;

unsigned long Month = 1;

unsigned long Day = 1;

unsigned long Hour = 0;

unsigned long Min = 0;

unsigned long Second = 0;

unsigned int Pass4year;

int hours_per_year;

if(Second_data < 0)

{

Second_data = 0;

}

Second = Second_data%60; //取秒

Second_data /= 60;

Min = Second_data%60; //取分

Second_data /= 60; //余下的小时

//过去有多少个4年,每4年有 1461*24小时

Pass4year = Second_data/(1461*24);

//计算年份

Year = 1970 +Pass4year*4;

//剩下的小时数

Second_data = Second_data %(1461*24);

//校正闰年影响的年份,计算一年中剩下的小时数

for(;;)

{

//一年的hour = 365*24

hours_per_year = 365*24;

//判断闰年

if((((Year%4)==0)&&((Year%100)!=0)) ||((Year%400)==0))

{

hours_per_year +=24;

}

if(Second_data < hours_per_year)

{

break;

}

Year++;

Second_data -= hours_per_year;

}

//小时数

Hour = Second_data%24;

Second_data /= 24; //剩下的天数

Second_data+=1; //天数从1号开始

if((((Year%4)==0)&&((Year%100)!=0)) ||((Year%400)==0))

{

if(Second_data >60)

{

Second_data–;

}

else

{

if(Second_data == 60)

{

Day = 29;

Month = 1;

return;

}

}

}

//计算月日

for(Month = 0;Days[Month]<Second_data;Month++)

{

Second_data -= Days[Month];

}

Day = Second_data;

Month = Month+1;

}