在Linux C或C++编程中,因为应用场景的不同,经常会遇到各种时间之间的装换,有时需要BCD时间,有时需要Unix时间戳,也有叫绝对时间的。这里介绍几种时间格式转换的应用。
Unix时间戳:
Unix时间戳是一个绝对值,表示距离时间(1970-1-1, 00:00:00)的秒数。在C\C++ 语言中,用数据类型time_t 表示时间戳,time_t 本质上是一个long int。获取当前时间的时间戳代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char * argv[])
{
time_t now;
time(&now);
printf("Now:%ld \n",now);
}
行结果为:
biao@ubuntu:~/test/test$ ./a.out
Now:1515229831
biao@ubuntu:~/test/test$
BCD时间:
所谓BCD时间就是以BCD码形式表示的时间。比如整型0x201801061647 表示2018年1月6日16时47分。
下面举例几种BCD时间的转换:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
/***************************************************************************
*函数名称:Char2Bcd
*函数介绍:字符串转BCD
*输入参数:-buf:指向字符串
*输出参数:无
*返回值 :转换后的双精度值
*修改历史:
***************************************************************************/
char Char2Bcd(char i_cHexData)
{
char i;
i=((i_cHexData%100)/10)*16+(i_cHexData%10);
return i;
}
/***************************************************************************
*函数名称:Get_BCDTime7
*函数介绍:转换为BCD码格式时间
*输入参数:-*time:
*输出参数:无
*返回值 :无
*修改历史:
***************************************************************************/
void Get_BCDTime7(time_t i_tTime,char* o_cpBcdTime)
{
struct tm *time;
time=localtime(&i_tTime);
o_cpBcdTime[0]=Char2Bcd((time->tm_year+1900)/100);
o_cpBcdTime[1]=Char2Bcd((time->tm_year+1900)%100);
o_cpBcdTime[2]=Char2Bcd(time->tm_mon+1);
o_cpBcdTime[3]=Char2Bcd(time->tm_mday);
o_cpBcdTime[4]=Char2Bcd(time->tm_hour);
o_cpBcdTime[5]=Char2Bcd(time->tm_min);
&n