[英]Which method should I use?
我是一名中級Java程序員,正在編寫圖書管理員Java應用程序,由於某種原因,我無法確定是否應該使用dueDate.after(today)
或dueDate.before(today)
方法來確定這本書是否逾期。 通過鍵入這兩種方法,我已經獲得了一些相互矛盾的價值觀。 因此,我還假設我的代碼中也存在其他錯誤,因此,如果您能夠遵循正確的方法,那將是很好的,這樣我就可以繼續解決其他錯誤。
您需要dueDate.before(today)
:截止日期在今天之前; 截止日期是過去的日期,所以這本書已經過期了。
交換對象也許更容易? 您會在today.after(dueDate)
,然后大聲朗讀,這突然變得很清楚:“如果今天在到期日之后,則...”
請記住, before
和after
方法執行<
(或>
)比較,而不是<=
(或>=
比較)。 這就是API文檔中“嚴格”一詞的含義。
而且,Java Date
對象實際上是即時的,而不是人們通常認為的“日期”。 也就是說,它不僅會比較日期,而且會比較時間。
如果您只想比較一天,而不檢查當天的時間,則將所有到期日期創建為特定時間,例如午夜。 例如,假設一本書應於10月26日到期。截止日期可以是10月27日午夜。
boolean overdue = !now.before(dueDate);
有點尷尬的否定說明了現在是10月27日上午12:00的情況。
dueDate.before(today)
將轉換為該書在今天之前的實際dueDate.before(today)
,這意味着該書實際上已過期。 這可能就是您想要的(假設您要檢查的是真的)
事物的另一面
dueDate.after(today)
會轉換為該書在今天之后發生的實際DueDate,表示該書尚未到期。
!dueDate.after(today)
和dueDate.before(today)
之間的唯一區別是兩個日期完全相同時的結果-假定在到期日歸還書還沒有過期,所以dueDate.before(today)
應該是正確的。
至於您未指定的其他問題:您是否知道java.util.Date
代表毫秒精度的時間點,而不是日歷日期? 這意味着,為了將其比較方法用於日歷日期,必須確保在創建Date實例時將時間分量設置為零。 造成問題的另一個原因可能是時區差異。
這取決於您要實現的目標。 借書時,dateDate是要設置的日期嗎? 截止日期是從書的借出日期中得出的,因此,我將假設book對象包含借出和截止日期作為屬性,嘗試使用諸如book.isDue(today)
這樣的方法。
對於類似這樣的問題,如果在設計對象之間的動作之前先明確指出涉及哪些對象以及它們之間的關系,將很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.