2011-12-08 61 views
1

我將十六進制字符串轉換成dateformat ...我錯誤的日期時間與以下..不知道我在哪裏犯了一個錯誤。十六進制日期時間格式的字符串

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()); 

我的輸出爲 '星期一09年1月10時十三分49秒CST 2012' ..這是不正確的(應該是2011-12-8,22:13:30.0 - 忽略現在格式) 。

回答

4

用Java月由整數文字0..11表示,這是一月份爲0,...,以及十二月份爲11在此代碼,Integer.parseInt(month, 16)返回12,其中Calendar對象將轉移到明年1月(按年增加)。

CNC中
此外,在cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));

2

幾點注意事項:

  1. 月的日曆類是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)); 
    
+0

@srkavin設置HOUR_OF_DAY而不是HOUR:謝謝..它的工作太棒了! – riamob

+0

謝謝你指出這個月的錯誤..它現在有效。 – riamob

相關問題