考慮下面的代碼只確定一個Date對象的時間部分是另一個Date對象的時間部分之前:比較只有日期的時間部分
private boolean validStartStopTime(Date start, Date stop) {
Calendar startCal = Calendar.getInstance();
Calendar stopCal = Calendar.getInstance();
startCal.clear();
stopCal.clear();
startCal.setTime(start);
stopCal.setTime(stop);
startCal.set(Calendar.YEAR, 2011);
stopCal.set(Calendar.YEAR, 2011);
startCal.set(Calendar.MONTH, 1);
stopCal.set(Calendar.MONTH, 1);
startCal.set(Calendar.DAY_OF_YEAR, 1);
stopCal.set(Calendar.DAY_OF_YEAR, 1);
return startCal.before(stopCal);
}
這會確保時間的比較是正確的?有沒有更好的選擇(喬達不是一個選項)?我相信這相當於將Calendar
對象設置爲當前日期/時間並手動複製小時,分鐘和毫秒組件。你可以假設時區是一樣的。
編輯:澄清我的意思是隻比較Date
對象的時間部分。我的意思是,當專門查看時間部分時,開始時間在停止時間之前。日期部分絕對不相關(在該開始=「1月2日20011 10AM」和結束=「2011年1月1日11AM」是非常好的),如果我有一個選擇,我只是使用一些只包含時間,但Date
對象是我給的。我不想寫一個if-else的序列,這就是爲什麼我有上面的方法,但我歡迎一個更清潔/更好的方法。
不需要設置年份,月份等等,因爲getInstance()返回設置爲「now」的Calendar對象。但爲了確保它們是相同的,我會改變:stopCal =(Calendar)startCal.clone();否則,我不明白爲什麼這不起作用。 – mirswith
我同意@mirswith,雖然這可能會工作,它突出了java的時間實現是多麼混亂,可以通過使用克隆和setTimes(它複製所有字段)清理。此外,使用清除是危險的,因爲日曆必須在返回before()的答案之前將這些髒字段設置爲某些東西。 – jpredham
有什麼方法可以使用喬達? – chrislovecnm