十六进制字符串到datetime格式

时间:2011-12-08 22:17:27

标签: java datetime hex

我正在将十六进制字符串转换为日期格式...我的日期时间错误与以下内容有关...不确定我在哪里犯了错误。

    String s1="07:db:0c:08:16:0d:1e:00";    //2011-12-8,22:13:30.0
    s1 = s1.replaceAll(":", "");
    String year = s1.substring(0, 4);
    String month = s1.substring(4, 6);
    String day = s1.substring(6, 8);
    String hour = s1.substring(8, 10);
    String minute = s1.substring(10, 12);
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, Integer.parseInt(year, 16));
    cal.set(Calendar.MONTH, Integer.parseInt(month, 16));
    cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day, 16));
    cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));
    cal.set(Calendar.MINUTE, Integer.parseInt(minute, 16));
   System.out.println(cal.getTime());

我的输出是'Mon Jan 09 10:13:49 CST 2012'..这是不正确的(应该是2011-12-8,22:13:30.0 - 格式现在被忽略)。

2 个答案:

答案 0 :(得分:4)

Java中的月份由整数文字0..11表示,即1月为0,...,12月为11.在此代码中,Integer.parseInt(month, 16)返回12,Calendar对象转换为1月明年(按年增加)。

CNC中
另外,在HOUR_OF_DAY

中设置HOUR而不是cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));

答案 1 :(得分:2)

很少注意到:

  1. Calendar类中的月份为from 0-11,其中0为1月。
  2. The toString format may vary
  3. 你忘了秒:

    String second = s1.substring(12, 14);
    cal.set(Calendar.SECOND, Integer.parseInt(second, 16));