2012-05-28 8 views
6

Я попытался это с помощью Jodatime DateTime,DateTime дает неожиданный результат

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

Я также попытался с помощью 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); 

Оба дают мне один и тот же результат, 1965/10/13 06:09:54.

Ожидаю, 1965/10/13 05:26:40, вместо этого. Я получаю это с помощью Oracle запрос, указанный ниже,

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

И на противоречие между Joda и Oracle, я попытался Wolframalpha, что также дает мне тот же результат, как Oracle.

Кто-нибудь, пожалуйста, объясните, почему это различие?

+0

'2075866000/86400', что такое' 86400'? –

+1

Какова ваша часовая зона по умолчанию? Если это в Индии, в 1930-х годах в ней были некоторые странные корректировки, которые повлияли бы на результат. –

+0

Я замечаю, что вы находитесь в Малайзии - как сказал Джим Гаррисон, корректировки этого часового пояса в прошлом веке могут объяснить несоответствие. См. Эту страницу: http://en.wikipedia.org/wiki/Time_in_Malaysia –

ответ

4

Согласно timeanddate.com были корректировки часового пояса в Куала-Лумпуре в 1901 году, 1905, 1933, 1941, 1942, 1945, общая сумма которых, вероятно, объясняет расхождение вы видите.

Редактировать: На самом деле, если вы складываете все настройки, которые вы получаете 43:14, это именно то расхождение, которое вы видите.

JodaTime и Java дают вам правильные цифры.

Смежные вопросы