-3
私はウィンドウを変換したい:128ビットシステム構造ie ..、 "D9070B00010002000600090013000000" 人間の読める形式に.. ..、Mon、02 November 2009 06:事前タイムスタンプ変換Java(Windowsの128ビットシステム構造人間の読める形式に
私はウィンドウを変換したい:128ビットシステム構造ie ..、 "D9070B00010002000600090013000000" 人間の読める形式に.. ..、Mon、02 November 2009 06:事前タイムスタンプ変換Java(Windowsの128ビットシステム構造人間の読める形式に
あなたが含ま形式で午前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
インスタンスを返すほうがよいでしょう。
私は過去3日間このロジックを探していますが、これはうまくいきました。ありがとうございました。私はmsdosの日付と時刻を読み込み可能な形式に変換しようとしています。3561A436 to Fri、04 May 2007 12:09:42 – user1309583