将 java.util.Date 截断为 LocalDate *without* toInstant() 因为 java.sql.Date 给出了 UnsupportedOperationException
如果我在一个碰巧是 的变量上使用 's,我得到一个 .java.util.Date
toInstant()
java.sql.Date
UnsupportedOperationException
try {
java.util.Date input = new java.sql.Date(System.currentTimeMillis());
LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
} catch (UnsupportedOperationException e) {
// grrr!
}
我所关心的来自mysql DB中通过遗留API的DATE字段,实际上是一个.java.util.Date
java.sql.Date
现在以下相关问题都非常有趣:
不支持的OperationException - 为什么你不能在java.sql.Date上调用instant()?
将 java.util.Date 转换为 java.time.LocalDate
LocalDate 到 java.util.Date,反之亦然 最简单的转换?
但是他们没有提供任何优雅的截断方法来摆脱时间组件并获得Java 8 。java.util.Date
LocalDate
我承认存在一个问题,即一个时区的同一时间时刻可能与另一个时区的同一时刻的日期不同。
我怀疑这个解决方案将涉及java.util.Calendar,但与其制定自己的解决方案,我宁愿先确定其他人做了什么。
我宁愿找到比这更短的东西:
Date date = new Date(); // timestamp now Calendar cal = Calendar.getInstance(); // get calendar instance cal.setTime(date); // set cal to date cal.set(Calendar.HOUR_OF_DAY, 0); // set hour to midnight cal.set(Calendar.MINUTE, 0); // set minute in hour cal.set(Calendar.SECOND, 0); // set second in minute cal.set(Calendar.MILLISECOND, 0); // set millis in second Date zeroedDate = cal.getTime(); // actually computes the new Date