我认为目前公认的答案是不正确的。尽管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