2012-05-08 4 views

答えて

0

あなたが含ま形式で午前9時19ので、そこに私はなっていない午前、それを変換するアルゴリズムはrefference http://www.digital-detective.co.uk/freetools/decode.aspのために。ここで例の時間とJavaでの時間を換算。

おかげでリトルのいくつかの並べ替えですエンディアンの16進数でエンコードされたWORDの混乱。恐ろしく非効率的に見える

しかし、それはこのように復号することができます:あなたが投稿何に詰め込む

long getSystemStructureTime(String enc) { 
    long result = -1L; 
    // system time is typically a set of WORDs encoded, little-endian 
    if (!TextUtils.isEmpty(enc)) { 
     final int length = enc.length(); 
     ByteBuffer b = ByteBuffer.allocate(length/2); 
     b.order(ByteOrder.BIG_ENDIAN); 
     for (int i = 0; i < enc.length(); i+=2) { 
      b.put((byte) Integer.parseInt(enc.substring(i, i + 2), 16)); 
     } 
     b.flip(); 
     b.order(ByteOrder.LITTLE_ENDIAN); 
     try { 
      int year = b.getShort(); 
      int month = b.getShort(); 
      int day = b.getShort(); 
      int dayOfMonth = b.getShort(); 
      int hourOfDay = b.getShort(); 
      int minuteOfHour = b.getShort(); 
      int secondsOfMinute = b.getShort(); 
      int millisOfSecond = b.getShort(); 

      Calendar c = Calendar.getInstance(); 
      c.set(Calendar.YEAR, year); 
      c.set(Calendar.MONTH, month - 1); // months in calendar are base 0 
      c.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
      c.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      c.set(Calendar.MINUTE, minuteOfHour); 
      c.set(Calendar.SECOND, secondsOfMinute); 
      c.set(Calendar.MILLISECOND, millisOfSecond); 

      result = c.getTimeInMillis(); 
     } catch (BufferUnderflowException e) { 
      // This wasn't a proper time.. 
     } 
    } 
    return result; 
} 

System.out.println(new Date(getSystemStructureTime("D9070B00010002000600090013000000"))); 

利回り:

Mon Nov 02 06:09:19 GMT+00:00 2009 

このバージョンでは、ミリ秒単位の時間を返し、それがあるかもしれませんあなたが好きなことに応じて、解析中に作成されたCalendarインスタンスを返すほうがよいでしょう。

+0

私は過去3日間このロジックを探していますが、これはうまくいきました。ありがとうございました。私はmsdosの日付と時刻を読み込み可能な形式に変換しようとしています。3561A436 to Fri、04 May 2007 12:09:42 – user1309583

関連する問題