Date转LocalDate报错解决

转换的方法代码:

//获取localdata
    private LocalDate getLocalDate(java.util.Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        LocalDate localDate = localDateTime.toLocalDate();
        return localDate;
    }

运行就报错,错误日志如下:

java.lang.UnsupportedOperationException: null
	at java.sql.Date.toInstant(Date.java:304) ~[na:1.8.0_131]

翻看API发现:
在java.util.Date中:
在这里插入图片描述
而在java.sql.Date中是这样:
在这里插入图片描述

我明明是一个java.util.Date怎么会到此处是sql.Date呢?我debug到此处发现:
在这里插入图片描述
我传来的参数格式的问题,解决方法:

//获取localdata
    private LocalDate getLocalDate(java.util.Date date) {
		//将参数转为系统默认的格式
		java.util.Date date1 = new Date(date.getTime());
        Instant instant = date1.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
        LocalDate localDate = localDateTime.toLocalDate();
        return localDate;
    }

这样问题就完美解决了.

### 关于 Java `time.LocalDate` 的数据范围 (`dataScope`) 报错解决方案 当处理 `java.time.LocalDate` 类型的数据时,如果遇到与日期范围相关的错误(通常称为 `dataScope` 错误),这可能是由于以下几个原因引起的: #### 1. 输入的日期超出有效范围 `LocalDate` 支持从公元前999,999年到公元后999,999年的日期范围。然而,在实际应用中,数据库或其他外部系统的日期字段可能有更严格的限制。例如,某些数据库仅支持 ISO 8601 标准中的日期范围 (如 MySQL 中 DATE 类型的有效范围是从 '1000-01-01' 到 '9999-12-31')。 解决方法可以是对输入的日期进行验证,确保其在允许范围内[^2]: ```java public static void validateDate(LocalDate date) { LocalDate minAllowed = LocalDate.of(1000, 1, 1); LocalDate maxAllowed = LocalDate.of(9999, 12, 31); if (date.isBefore(minAllowed) || date.isAfter(maxAllowed)) { throw new IllegalArgumentException("Date out of allowed range: " + date); } } ``` #### 2. 时间区域设置不匹配 如果程序运行环境的时间区域设置与预期不符,可能会导致解析或格式化日期时报错。可以通过显式指定时间区域来避免此类问题[^3]: ```java ZoneId zoneId = ZoneId.systemDefault(); // 或者使用固定区域 ZoneId.of("UTC") LocalDate now = LocalDate.now(zoneId); System.out.println(now); ``` #### 3. 数据库驱动版本过低 部分旧版 JDBC 驱动对于 `java.time.*` API 的支持不够完善,可能导致存储或读取 `LocalDate` 对象失败。升级至最新版本的数据库驱动通常是解决问题的关键步骤之一[^4]。 #### 4. JSON 序列化/反序列化冲突 在 Web 开发场景下,前端传递给后端的 JSON 数据可能无法正确映射为 `LocalDate` 实体属性。此时需自定义 Jackson 模块以适配 `LocalDate` 的序列化逻辑[^5]: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); ``` 通过上述调整可减少因默认行为差异引发的异常情况。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值