2013-12-22 54 views
3

我遇到了問題,因爲我試圖將日期傳遞給Calendar.before()和Calendar.after(),而不是傳遞日曆。爲什麼Calendar.before()和Calendar.after()接受對象值?

如果通過日期,這些方法總是返回false。

+3

該方法首先檢查是否當「日曆的instanceof」。 javadoc是這樣說的,當且僅當是一個Calendar實例時。至於爲什麼,我不知道。 –

+2

我相信沒有很好的理由。 Calendar API普遍認爲設計不佳。 JDK 8確實解決了所有問題,但很多都無法升級。 Joda時間是不能使用JDK 8的人的第三方替代品。 – user2684301

回答

2

這可能是因爲有人可以編寫Calendar的子類,它可以處理各種數據類型,如Date,而不會破壞Calendar.before(Object)Calendar.after(Object)方法簽名。 沒有其他很好的理由可以想到。所以可能你必須忍受它。

您也可以之前退房Calendar.before(Object when), why Object?

+0

Calendar的子類仍然安全且自動地轉換爲日曆,因此這不是合理的理由。 – user2684301

+0

@ user2684301: - 是的,我同意這不是一個有效的理由,但我想到了它。我認爲這可能沒有很好的理由! –

0

日曆和接收對象不作爲格式化字符串 ,使工作嘗試發送日期後:

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
cal.setTime(sdf.parse("Mon Mar 14 16:02:37 GMT 2011")); 

Calendar.before(cal); 

應該這樣做。

至於爲什麼 - 不認爲真的有一個很好的理由,因爲整個班級是複雜的超越理性。

+3

該OP是問*爲什麼*,而不是*如何*。 – BLaZuRE

相關問題