C语言bcd码怎么表示时间,将BCD编码的十六进制值转换为时间戳/数据和时间(ASN.1语法)...

本文介绍如何将MSC生成的十六进制时间戳字符串,使用BCD编码转换为ASN.1语法的时间戳,并解析为人类可读的日期和时间,探讨了具体步骤和遇到的问题,寻求在Bouncycastle API中的解决方案。
摘要由CSDN通过智能技术生成

您好,我有十六进制的由MSC生成的时间戳字符串(是相邻基站记录移动用户的位置记录)。现在我想将十六进制字符串转换为人类可读的日期和时间。将BCD编码的十六进制值转换为时间戳/数据和时间(ASN.1语法)

听到实际十六进制字符串变量是一个八位字符串数据类型(ASN.1语法)

让我给一个示例十六进制字符串如何像

hexadecimal value : 1307301826042B0530

听到通过转换所形成的十六进制值BCD编码的时间戳波纹管

Local time of UTC compression format

--YY = Year 00 to 99 BCD encoded

--MM = Month 01 to 12 BCD encoded

--DD = Day 01 to 31 BCD encoded

-- hh = hour 00 to 23 BCD encoded

-- mm = minute 00 to 59 BCD encoded

-- ss = second 00 to 59 BCD encoded

-- S = Sign 0 = “+”, “-“ ASCII encoded

-- hh = hour 00 to 23 BCD encoded

-- mm = minute 00 to 59 BCD encoded

所以以下表格显示八位字符串的时间戳210

in ASN.1 syntax it look like TimeStamp ::= OCTET STRING (SIZE(9))

Octet 1 YY

Octet 2 MM

Octet 3 DD

Octet 4 hh

Octet 5 mm

Octet 6 ss

Octet 7 S

Octet 8 hh

Octet 9 mm

所以根据上述表中的十六进制值可以被划分为休耕

Hex value : 1307301826042B0530

Octet 1 YY : 13

Octet 2 MM : 07

Octet 3 DD : 30

Octet 4 hh : 18 Hear every octet is of one byte each

Octet 5 mm : 26

Octet 6 ss : 04

Octet 7 S : 2B

Octet 8 hh : 05

Octet 9 mm : 30

所以为十六进制转换为时间戳/日期和时间我没有如波纹管

首先我转换每个十六进制字节为BCD和BCD二进制和二进制到十进制然后我得到

Decimal : 685571919861616

然后我试图转换成日期和时间

String decimal = "685571919861616";

Calendar c=Calendar.getInstance();

c.setTimeInMillis(Long.parseLong(decimal));

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

System.out.println(dateFormat.format(c.getTime()));

但输出就像23694-11-28 09:54:21

即使我试图转换十六进制到十进制然后用java十进制转换成日期和时间,但输出就像8227-12-21 02:24:03

恳求帮助我就这个问题和我想知道在Bouncy castle API中是否有任何类可以做到这一点...?

任何帮助将不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值