2012-05-28 13 views
6

Próbowałem to przy użyciu Jodatime DateTime,DateTime daje nieoczekiwany rezultat

DateTime dateTime = DateTime 
      .parse("1-JAN-1900", DateTimeFormat.forPattern("dd-MMM-yyyy")) 
      .plusSeconds(2075866000); 
    String dateTimeStr = DateTimeFormat.forPattern(
      "yyyy/MM/dd HH:mm:ss").print(dateTime); 
    System.out.println(dateTimeStr); 

Próbowałem również używając Jodatime MutableDateTime

MutableDateTime dateTime = MutableDateTime 
      .parse("1-JAN-1900", DateTimeFormat.forPattern("dd-MMM-yyyy")); 
    dateTime.add(DurationFieldType.seconds(), 2075866000); 
    String dateTimeStr = DateTimeFormat.forPattern(
       "yyyy/MM/dd HH:mm:ss").print(dateTime.toDateTime()); 
    System.out.println(dateTimeStr); 

Oba dają mi taki sam wynik, 1965/10/13 06:09:54.

Oczekuję, 1965/10/13 05:26:40 zamiast. Dostaję to przy użyciu Oracle zapytanie poniżej,

select to_date('1900-JAN-1') + 2075866000/86400 from dual 

A na sprzeczności między Joda i Oracle, próbowałem Wolframalpha, które również daje mi ten sam wynik jak Oracle.

ktoś proszę wyjaśnić, dlaczego jest taka różnica?

+0

'2075866000/86400', do czego służy" 86400 "? –

+1

Jaka jest domyślna strefa czasowa? Jeśli jest w Indiach, w latach trzydziestych pojawiają się dziwne korekty, które wpłynęłyby na wynik. –

+0

Zauważyłem, że znajdujesz się w Malezji - jak powiedział Jim Garrison, korekty w tej strefie czasowej w ubiegłym stuleciu mogą wyjaśnić rozbieżności. Zobacz tę stronę: http://en.wikipedia.org/wiki/Time_in_Malaysia –

Odpowiedz

4

Zgodnie z timeanddate.com w Kuala Lumpur dokonano korekty stref czasowych w 1901, 1905, 1933, 1941, 1942, 1945, których suma prawdopodobnie tłumaczy rozbieżność, którą widzisz.

Edit: W rzeczywistości, jeśli dodać do wszystkich korekt dostać 43:14, która jest dokładnie taka rozbieżność widzisz.

JodaTime i Java są daje poprawnych liczb.

Powiązane problemy