2010-07-25 246 views
4

我想獲得兩個Java Date對象之間的區別。我已經使用了喬達時間庫。但問題是,我得到的天差異比實際的天差異更大。兩個Java日期之間的差異?

這裏是我的代碼片段:

DateFormat formatter = new SimpleDateFormat("mm/dd/yyyy"); 

Date someDate=new Date(); 
Date today = Calendar.getInstance().getTime(); 

try  { 
    someDate = formatter.parse("06/22/2010"); 
} 
catch(ParseException pe) { 
    System.out.println("Parser Exception"); 
} 

int days = Days.daysBetween(new DateTime(someDate), new DateTime(today)).getDays(); 

System.out.println(" Days Between " + someDate + " : " + today + " - " + days); 

這裏是我的輸出:

Days Between Fri Jan 22 00:06:00 IST 2010 : Sun Jul 25 19:27:01 IST 2010 - 184 

這裏,爲什麼它以 「06/22/2010」 爲1月22日?有沒有人面臨類似的問題?

幫助我的朋友..感謝名單提前..

回答

12

月是MM

你的情況:

日期格式格式化=新 的SimpleDateFormat(」 MM/DD/YYYY 「);

3

mm =>分鐘,而不是幾個月 - 您需要MM幾個月 - 這將解決您的Jan問題!

4

您的圖案稍有缺陷。 mm被解析爲分鐘,您正在尋找MM這是的月份

19

看起來像mm是指分鐘,而不是幾個月,這是MM。請檢查here以查看適當的刻字清單:)

+0

請刷新鏈接 – 2012-04-13 11:29:38

+0

@ShahzadImam:現在鏈接指向新版本的JavaDocs。 – npinti 2012-04-13 11:44:53

+0

謝謝。解決了問題..... mm – 2012-04-13 11:51:28

2

其他答案正確解決了您的具體問題。

LocalDate

但有一個更大的解決方案。如果您只從日期開始,沒有時間和時區,那麼您應該使用LocalDate類,而不是DateTime

時區

您的代碼忽略了時區的關鍵問題。在嘗試確定「今天」時,即使對於LocalDate,時區也很重要。你想要在蒙特利爾還是巴黎的今天約會?一個新的一天早些時候在巴黎亮相。當您省略時區時,您將獲得JVM當前的默認時區。

Joda-Time Can Parse

此外,讓Joda-Time進行解析。根本不需要使用java.util.Date & .Calendar。 Joda時間的格式化字符與java.util.Date幾乎相同,但不完全如此,以便徵求文檔的意見。在這種情況下它是相同的。

DateTimeFormatter formatter = DateTimeFormat.forPattern("MM/dd/yyyy"); 
LocalDate past = formatter.parseLocalDate("06/22/2010"); 
DateTimeZone = DateTimeZone.forID("America/Montreal"): // match time zone intended for that input string. 
int days = Days.daysBetween(past, LocalDate.now(timeZone));