2012-05-28 43 views
6

我已經嘗試過這種使用Jodatime 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 

而且在喬達和甲骨文之間的矛盾,我想Wolframalpha,這也給了我同樣的結果如Oracle。

任何人請解釋爲什麼有這種差異?

+0

'2075866000/86400','86400'用於什麼? –

+1

您的默認時區是什麼?如果是在印度,那麼在20世紀30年代會有一些奇怪的調整會影響結果。 –

+0

我注意到你位於馬來西亞 - 正如吉姆·加里森所說,在上個世紀對該時區的調整可能會解釋這種差異。看到這個頁面:http://en.wikipedia.org/wiki/Time_in_Malaysia –

回答

4

根據timeanddate.com,吉隆坡1901年,1905年,1933年,1941年,1942年和1945年的時區調整,其總和可能解釋了您所看到的差異。

編輯:事實上,如果你加起來所有的調整你得到43:14,這正是你看到的差異。

JodaTime和Java給你正確的數字。