【问题标题】:hex string to datetime format十六进制字符串到日期时间格式
【发布时间】:2011-12-08 22:17:27
【问题描述】:

我正在将十六进制字符串转换为日期格式......我的日期时间错误如下......不知道我在哪里犯了错误。

    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 -- 暂时忽略格式)。

【问题讨论】:

    标签: java datetime hex


    【解决方案1】:

    Java 中的月份由整数文字 0..11 表示,即一月是 0,...,十二月是 11。在这段代码中,Integer.parseInt(month, 16) 返回 12,日历对象将其转移到明年的一月(按年递增)。

    -编辑-
    另外,在cal.set(Calendar.HOUR, Integer.parseInt(hour, 16)); 中设置HOUR_OF_DAY 而不是HOUR

    【讨论】:

      【解决方案2】:

      几点说明:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 2011-05-04
        • 2010-10-04
        • 2018-08-10
        • 2014-03-07
        相关资源
        最近更新 更多