我認爲目前公認的答案是不正確的。儘管java.sql.Time意味着它的日期字段被設置爲1970-1-1,但這不是事實。如果使用轉換
new java.sql.Time(new LocalTime(...).toDateTimeToday().getMillis())
那麼java.sql.Time對象的內部millesecond表示形式將反映今天的日期。這在比較java.sql.Time對象時會導致意外行爲。 在毫秒值上執行比較,如果底層日期不同,則時間域與比較結果無關
更好的方法是使用不推薦使用的構造函數和方法顯式使用時間域在java.sql.Time中:
LocalTime localTime = new LocalTime(1,0,0,0);
java.sql.Time sqlTime = new java.sql.Time(localTime.getHourOfDay(), localTime.getMinuteOfHour(), localTime.getSecondOfMinute())
類似地,在另一個方向上
java.sql.Time sqlTime = new java.sql.Time(1,0,0);
LocalTime localTime = new LocalTime(sqlTime.getHours(), sqlTime.getMinues(), sqlTime.getSeconds());
使用不贊成的方法是不好的做法。 – pgerstoft 2013-07-02 18:47:37
當然,但你必須知道什麼時候打破規則。這些被棄用的方法是實現該目標的最簡單和最有效的方法,並且在可預見的將來沒有計劃將它們從Java中移除。坦率地說,孫永遠不應該棄用他們;那些替代他們的可怕混亂是整個理由轉向像JodaTime這樣的更清晰的實現。 – 2013-07-04 13:26:09