2011-12-08 27 views
1

16進文字列をdateformatに変換しています...私は間違った日付時刻になっています。16進文字列をdatetime形式に変換

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

私の出力が正しくありません「月1月9日10時13分49秒CST 2012」..(それは2011-12-8,22する必要があります:13:30.0 - 今では無視形式)であります。

答えて

4

月を整数リテラル0..11で表され、それは月ですが...、0で、12月には、このコードでは11です。 、Integer.parseInt(month, 16)は12を返します。これは、Calendarオブジェクトが来年1月に移動する(年が増える)。

-EDIT-

はまた、

2

ほとんどのノート:

  1. 月Calendarクラスで0が1月であり、from 0-11です。
  2. The toString format may vary
  3. あなたは秒を忘れてしまった:Javaで

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

@srkavin cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));HOUR_OF_DAY代わりのHOURを設定:ありがとう。..その作業素晴らしい!! – riamob

+0

今月の間違いを指摘していただきありがとうございます。 – riamob

関連する問題