2011-03-04 7 views
3

어디서부터 시작해야할지 모르겠다. 몇 가지 조사를했지만 아무 것도 찾을 수 없었다. 내가 날짜 클래스를 사용해야하지만 내가 뭘 해야할지 알아 아래에 강조 표시로 날짜를 꺼내지만, 16 진수 값은 어디에서 날짜 값을 받고 있습니까? 하나는 내가 가장 greatful 것 알고있는 경우 http://www.facebook.com/photo.php?pid=2298915&l=e45630aead&id=1283154964자바가 16 진수로 변환

:

이미지는 나 이미지를 업로드 할 수 실 거예요 여기입니다!

많은 감사

+0

당신은 문제가 16 진수 값을 당기거나 문제가 날짜에 그 진수로 변환가 있습니까? 나는 너를 도울 수 있을지 모르지만 좀 더 자세한 내용은 다른 사람들이 너를 이해하고 돕도록 도울지도 모른다. –

+1

변환 할 16 진수 값을 정확히 알고 있습니까? Btw. 이것은 거의 자바 문제는 아니며 기본 형식을 이해하고 바이트를 읽거나 (* 16 진수 포함하지 않음! *) 숫자로 변환해야합니다 (예 : Epoch 이후 초를 지정하거나 형식이 정의 됨) 번호를 시간으로 변환하십시오. – maaartinus

답변

0

윈도우 스토어는 64 비트 필드로 1601년 1월 1일 UTC 이후 100 나노초의 숫자로 내부적으로 FILETIME.

JNI를 사용하고 Windows API의 FileTimeToSystemTime()을 호출 할 수 있습니까? 그렇다면 것은 여기보고 있습니다

http://msdn.microsoft.com/en-us/library/ms724280(VS.85).aspx

을 그렇지 않은 경우 :

이 64 비트 필드는 당신이 가지고있는 자료 구조에있는 위치를 알고 있습니까? 03A0B00A ('AA'바이트) 주소를 지적했지만 03A0B008 또는 03A0B000 또는 03A0B0C0 대신 필드가있을 가능성은 거의 없습니다. 이 필드의 주소를 모르면 100 나노초 형식의 날짜 (29.1.2011)를 계산하여 리버스 엔지니어링 할 수 있습니다. 정확할 필요는 없습니다. 가장 중요한 바이트를 찾아야하므로 64 비트 필드가 어디에 있는지 알 수 있습니다. Java가 1.1.1601 UTC에 비해 나노초 단위로 계산할 수 있는지는 잘 모르겠지만 정확한 것은 아닙니다. 자바를 사용하여 UTC 1.1.1601부터 일을 계산 한 다음 그에 따라 곱할 수 있습니다. 이 추정치를 다시 사용하여 64 비트 필드의 주소를 찾은 다음 그 주소를 사용하여 시간을 계산할 수 있습니다.

0

파일의 바이트는 다음과 같습니다. AA37 D608 DFBF CB01.

왼쪽 열에 이것이 64 비트 정수 129407978957060010으로 해석된다는 것을 알 수 있습니다. 다시 16 진수로 변환하면 숫자가 "little-endian"형식으로 저장됩니다. 01CB BFDF 08D6 37AA.

그래서 당신이해야 할 것입니다 :

byte[] data = new byte[] { (byte) 0xAA, (byte) 0x37, (byte) 0xD6, 
      (byte) 0x08, (byte) 0xDF, (byte) 0xBF, (byte) 0xCB, (byte) 0x01 }; 

    // convert bytes to long time 
    long val = 0; 
    for(int i=7;i>=0;i--) { 
     val <<= 8; 
     val += 0xff & data[i]; 
    } 

    // convert 100 nanos to milliseconds 
    val /= 10000; 

    // convert to time offset from 1st Jan 1601 AD 
    Calendar calend = Calendar.getInstance(); 
    calend.set(1601,0,01,00,00,00); 
    calend.set(Calendar.MILLISECOND, 0); 
    val += calend.getTimeInMillis(); 
    calend.setTimeInMillis(val); 

    // display result 
    DateFormat df = DateFormat.getDateTimeInstance(); 
    System.out.println(df.format(calend.getTime())); 
관련 문제