gpt4 book ai didi

java - 将 java.util.Date 截断为 LocalDate *没有* toInstant() 因为 java.sql.Date 给出 UnsupportedOperationException

转载 作者:行者123 更新时间:2023-12-01 16:38:00 31 4
gpt4 key购买 nike

如果我使用java.util.DatetoInstant()在一个恰好是 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!
}

java.util.Date我关心的数据来自 mysql DB 中通过遗留 API 的 DATE 字段,实际上是 java.sql.Date

现在以下相关问题都非常有趣:

UnsupportedOperationException - Why can't you call toInstant() on a java.sql.Date?

Convert java.util.Date to java.time.LocalDate

LocalDate to java.util.Date and vice versa simplest conversion?

但它们没有提供任何优雅的方式来截断 java.util.Date摆脱时间组件并获得 Java 8 LocalDate .

我承认存在一个问题,即一个时区的同一时刻可能与另一时区的同一时刻是不同的日期。

我怀疑该解决方案将涉及 java.util.Calendar,但我宁愿首先建立其他人所做的事情,而不是制作自己的解决方案。

我更愿意找到比这更短的东西:

from Resetting the time part of a timestamp in Java :

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

最佳答案

通常最简单的解决方案是最难找到的:

public LocalDate convertDateObject(java.util.Date suspectDate) {

try {
// Don't do this if there is the smallest chance
// it could be a java.sql.Date!
return suspectDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

} catch (UnsupportedOperationException e) {
// BOOM!!
}

// do this first:
java.util.Date safeDate = new Date(suspectDate.getTime());

return safeDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

}

关于java - 将 java.util.Date 截断为 LocalDate *没有* toInstant() 因为 java.sql.Date 给出 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46794789/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com