2010-02-12 63 views
3

什麼是計算java中兩個日曆日期之間的時間量的最佳方法。我正在編寫一種方法,用於確定在兩個日期之間傳遞的月數,並根據預定義的月數返回布爾值。這是我的代碼(無法正常工作)。如何確定Java中兩個日曆對象之間的時間?

此代碼始終返回false。此代碼也不考慮已過去的天數。如果開始日期是一個月末,這可能是一個問題。有沒有簡單的compareTo方法?

private boolean hasMatured() 
{ 
    Calendar now = Calendar.getInstance(); 

    Calendar start = (Calendar) super.dateOpened.clone(); 

    int nowYear = now.get(Calendar.YEAR); 
    int nowMonth = now.get(Calendar.MONTH); 

    int startYear = start.get(Calendar.YEAR); 
    int startMonth = start.get(Calendar.MONTH); 

    int monthsElapsed = (nowYear - startYear) * 12 + (nowMonth - startMonth); 

    return monthsElapsed>PERIOD_IN_MONTHS; 
} 
+0

在未來的問題中,請發佈以及**什麼**沒有正確工作。這段代碼發生了什麼?應該發生什麼呢?張貼在SSCCE(http://sscce.org)的味道都會非常有幫助。 – BalusC 2010-02-12 19:04:05

+0

我看到你編輯了這個問題。這裏的實際日期是什麼?將'now.getTime()','start.getTime()'和'monthsElapsed'的'System.out.println()'添加到方法的結尾。 – BalusC 2010-02-12 20:18:48

+0

@ZeroDivide:在你的評論中你說這是針對「CS任務」的。因此,請將問題標記爲家庭作業。 – GreenMatt 2010-02-12 20:55:44

回答

2
int nowYear = now.get(Calendar.YEAR); 
int nowMonth = now.get(Calendar.MONTH); 

int startYear = now.get(Calendar.YEAR); 
int startMonth = now.get(Calendar.MONTH); 

int monthsElapsed = (nowYear - startYear) * 12 + (nowMonth - startMonth); 
0

的代碼看起來不錯,從一個主要的警告期待:Calendar可變

所以,與其

Calendar start = super.dateOpened; 

你應該做

Calendar start = (Calendar) super.dateOpened.clone(); 

否則將更改體現在dataOpened這可能會導致意想不到的副作用。

+0

我對mutable這個詞不熟悉。但是,我明白爲什麼克隆這個對象很重要。我只是將引用傳遞給起始對象,這就是爲什麼這些變化會被反映出來。感謝您的幫助。 – ZeroDivide 2010-02-13 00:40:45

1

我會強烈推薦Joda Time所有日期相關的東西在Java中。它有一個更清潔,更直觀的API,收集日期間隔的概念等。

+0

謝謝!我會檢查這一點。但是,這段代碼是用於CS分配的,我相信我們應該使用java API。 – ZeroDivide 2010-02-12 19:23:13

+0

夠公平的。也許你會因爲提到java.util.Calendar不是很理想而得到額外的評價:-) – 2010-02-12 19:24:08

+0

有趣的是,「正確」的CS答案是忽略構建良好並經過測試的免費庫,而是成爲一名通宵專家日期數學。哦,諷刺。 – 2010-02-12 19:48:26

0

我錯過了什麼嗎?有一個的compareTo()的日曆,以及其他有用的東西......

如何:

Calendar now = Calendar.getInstance();

now.add(Calendar.MONTH, -PERIOD_IN_MONTHS);

return super.dateOpened.before(now);

從今天減去X個月,並查看開始日期是否仍然在該日期之前。如果是,那麼X個月一定已經過去了。

+1

OP之前做過,但之後改變它以反映給定的答案。檢查編輯歷史記錄(點擊問題編輯後的鏈接)。 – BalusC 2010-02-12 23:36:27

相關問題