您好,我有十六进制的由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中是否有任何类可以做到这一点...?
任何帮助将不胜感激。