2012-09-15 130 views
1

在Java中,如果一個或兩個日期可能在1970年之前(即Date對象不能使用),有沒有辦法找到兩個日期之間的天數?找到Java中兩個日期之間的差異

+0

如果是在1970年以前,那麼它是如何表示的?給細節。 – oldrinb

+0

增加一些價值(閏年爲4年的倍數),使其成爲「近期」日期,然後減去日期並添加您的套期的淨效應。這應該適用於1900年後的任何一年。在1900年之前,你必須考慮1900年**而不是**閏年。 –

+0

'(to.getTime() - from.getTime())/(1000L * 60 * 60 * 24)' – oldrinb

回答

2

你也可以嘗試的GregorianCalendar。 注意的是,雖然天是基於1

import java.util.GregorianCalendar; 

//january, 1st, 2012 
GregorianCalendar c1 = new GregorianCalendar(2012, 0, 1); 
//march, 3rd, 1912 
GregorianCalendar c2 = new GregorianCalendar(1912, 2, 3); 
long differenceInSeconds = (c1.getTimeInMillis() - c2.getTimeInMillis())/1000; 
+1

這種方法的問題在於Calendar類沒有考慮諸如閏年之類的東西(雖然這個帖子有點不相關)並且節省了白天的時間。如果您試圖計算同一年內日期之間的差異,這將起作用,但錯誤將開始蔓延,差距越來越大 – MadProgrammer

6

我強烈推薦Joda Time庫。例如:

Days.daysBetween(startDate.toDateMidnight() , endDate.toDateMidnight()).getDays() 
4

咦? Date可用於表示早於1970年的日期。只需將負數傳遞給其構造函數即可。

System.out.println(new Date(-1000)); 
System.out.println(new Date("Jul 4 1776")); // note: deprecated API. Just an easy example 

打印

Wed Dec 31 15:59:59 PST 1969 
Thu Jul 04 00:00:00 PST 1776 
+0

是的,我爲此而煩惱! –

1

小心來計算這樣的時間戳的基礎天的月份是0依據:

(to.getTime() - from.getTime())/( 1000L * 60 * 60 * 24)

無論使用Date還是GregorianCalender。

如果三月份的最後一個星期日在這個時間間隔內,這在歐洲不起作用。

在歐洲時間每年切換兩次一小時。 - 冬令時==>夏令時(最後一個星期日三月) - 夏令時==>冬令時(十月最後一個週日)

所以最後一個星期日在三月份只有23小時。因此計算結果會少一天。