将 BCD 编码的十六进制值转换为时间戳/数据和时间(ASN.1 语法)
Convert BCD encoded hexadecimal value into timestamp / data and time ( ASN.1 syntax)
您好,我有 MSC 生成的十六进制时间戳字符串(是相邻基站记录移动用户的位置)。现在我想将十六进制字符串转换为人类可读的日期和时间。
听说实际的十六进制字符串变量是Octet String数据类型(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
下面table显示八位字节串的时间戳
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
所以根据上面table十六进制值可以分为休闲
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
请帮我解决这个问题,我想知道充气城堡 API 中是否有任何 class 可以做到这一点...???
如有任何帮助,我们将不胜感激。
在处理编码文件的解码之前,我们应该清楚编码是如何完成的,然后只需几秒钟就可以解决上述问题
正如我所说,Octet 字符串的时间戳值如下所示
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
它清楚地表明 YY = 13 意味着 2013 就像明智的 MM = 07 , DD = 30 , hh = 18(24 小时制).... 等等
分析后我很震惊,因为它太简单了,为此我犹豫了 2 天,因为我没有太多关于编码是如何完成的信息。
您好,我有 MSC 生成的十六进制时间戳字符串(是相邻基站记录移动用户的位置)。现在我想将十六进制字符串转换为人类可读的日期和时间。
听说实际的十六进制字符串变量是Octet String数据类型(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
下面table显示八位字节串的时间戳
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
所以根据上面table十六进制值可以分为休闲
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
请帮我解决这个问题,我想知道充气城堡 API 中是否有任何 class 可以做到这一点...???
如有任何帮助,我们将不胜感激。
在处理编码文件的解码之前,我们应该清楚编码是如何完成的,然后只需几秒钟就可以解决上述问题
正如我所说,Octet 字符串的时间戳值如下所示
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
它清楚地表明 YY = 13 意味着 2013 就像明智的 MM = 07 , DD = 30 , hh = 18(24 小时制).... 等等
分析后我很震惊,因为它太简单了,为此我犹豫了 2 天,因为我没有太多关于编码是如何完成的信息。