CP56Time2A时间转换

* CP56Time2A时间格式

  • 该时标格式使用7个字节来表示时间信息,上图的表中体现为——从最左侧8所在的行开始,到下面56所在的行,共7行。每一行表示一个字节,每行从右向左依次是该字节的第一位(最低位)、第二位....第八位(最高位)。
  • 该时标格式使用56个二进制数(56bit)存储时间信息,这56个数分别有对应的序号(1-56)。Milliseconds占用了两个字节;尖括号中的0——59999即时间信息中秒的范围是0-59999ms(0.000~59.999s)。
#pragma pack(push, 1)
// cp56time2a时间格式
typedef union
{
	// 低7字节是七个八位位组二进制时间	
	uint64_t Cp56Time;
	
	struct
	{
		uint16_t msec;
		uint8_t min	: 6;
		uint8_t res1    : 1;
		uint8_t iv 	: 1;
		uint8_t hour 	: 5;
		uint8_t res2 	: 2;
		uint8_t su 	: 1;
		uint8_t mday 	: 5;
		uint8_t wday 	: 3;
		uint8_t month   : 4;
		uint8_t res3 	: 4;
		uint8_t year 	: 7;
		uint8_t res4 	: 1;
	}Compts;
}Cp56Time2a;

// 本地时间结构体 
typedef struct
{
	uint8_t year;
	uint8_t month;
	uint8_t mday;
	uint8_t hour;
	uint8_t min;
	uint16_t msec;
}Time;
#pragma pack(pop)


Time time = {0};  // 定义一个保存时间的结构体
Cp56Time2a cp56time2a =  {0};  // 定义一个cp56time2a的结构体

// cp56time2a 转本地时间
static uint64_t Cp56time2aToLocalTime(uint64_t cp56time2atime)
{
	printf("\n\t Year  :  %d \n\r", cp56time2a.Compts.year);
	printf("\n\t month :  %d \n\r", cp56time2a.Compts.month);
	printf("\n\t mday  :  %d \n\r", cp56time2a.Compts.mday);
	printf("\n\t wday  :  %d \n\r", cp56time2a.Compts.wday);	
	printf("\n\t hour  :  %d \n\r", cp56time2a.Compts.hour);
	printf("\n\t min   :  %d \n\r", cp56time2a.Compts.min);
	printf("\n\t msec  :  %d \n\r", cp56time2a.Compts.msec);
	return 0;
}	

// 本地时间转cp56time2a格式 
static void LocalTimeToCp56Time2a(Cp56Time2a *time)
{
    cp56time2a.Compts.year 	= time->time[1];
	cp56time2a.Compts.month	= time->time[2];
	cp56time2a.Compts.mday	= time->time[3];
	cp56time2a.Compts.hour	= time->time[4];
	cp56time2a.Compts.min	= time->time[5];
	cp56time2a.Compts.msec	= time->time[6];
}

uint64_t LocalTimeToCp56Time2a(const Time *time)
{	
        cp56time2a.Compts.year 	= time->year;
	cp56time2a.Compts.month	= time->month;
	cp56time2a.Compts.mday	= time->month;
	cp56time2a.Compts.hour	= time->hour;
	cp56time2a.Compts.min	= time->min;
	cp56time2a.Compts.msec	= time->msec;
	
    return cp56time2a.Cp56Time;
}

int main(void)
{
        time.year = 23;
	time.month = 12;
	time.mday = 12;
	time.hour =18;
	time.min = 30;
	time.msec = 40;
	
	printf("\n\t cp56time2a 0X:%llX \n\r", LocalTimeToCp56Time2a(&time));
    return 0;
}

相关推荐

  1. Jmeter学习总结(2)——时间参数化time

    2023-12-13 10:08:27       57 阅读
  2. 【C++】时间time

    2023-12-13 10:08:27       63 阅读
  3. cpp版ros2、opencv转换

    2023-12-13 10:08:27       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-13 10:08:27       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-13 10:08:27       74 阅读
  3. 在Django里面运行非项目文件

    2023-12-13 10:08:27       61 阅读
  4. Python语言-面向对象

    2023-12-13 10:08:27       71 阅读

热门阅读

  1. 无分页情况下的接口优化

    2023-12-13 10:08:27       88 阅读
  2. C9900-H416的使用方法

    2023-12-13 10:08:27       59 阅读
  3. 顺序表

    顺序表

    2023-12-13 10:08:27      69 阅读
  4. ClickHouse中select final和optimize table final的区别

    2023-12-13 10:08:27       65 阅读
  5. 百度爬虫

    2023-12-13 10:08:27       66 阅读
  6. 12月11日总结

    2023-12-13 10:08:27       59 阅读
  7. 12月8日总结

    2023-12-13 10:08:27       48 阅读
  8. 每日博客

    2023-12-13 10:08:27       66 阅读
  9. 1213

    2023-12-13 10:08:27       68 阅读
  10. 阅读笔记《有效需求分析》2

    2023-12-13 10:08:27       76 阅读
  11. 12月13日总结

    2023-12-13 10:08:27       68 阅读
  12. 12月12日总结

    2023-12-13 10:08:27       61 阅读
  13. 每日总结

    2023-12-13 10:08:27       62 阅读
  14. Linux部署mosquitto及其配置

    2023-12-13 10:08:27       66 阅读
  15. pandas 遍历

    2023-12-13 10:08:27       63 阅读
  16. Qt打包

    2023-12-13 10:08:27       72 阅读
  17. 12.12总结

    2023-12-13 10:08:27       67 阅读
  18. get请求数组参数,格式转换

    2023-12-13 10:08:27       82 阅读