You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储当前时间日期时遇类型不兼容错误:String无法转为Date

解决String无法转换为Date的类型不匹配问题

嘿,这个错误我之前也踩过坑!本质就是类型不匹配——你代码里生成的是字符串格式的时间,但是setUpdateDt方法只接受Date类型的参数,编译器当然会报错啦。

先拆解下你的代码问题:

  • dtf.format(now)执行后返回的是String类型(比如类似"2024-05-20 15:40:00"的字符串)
  • 但你的setUpdateDt(Date time)方法要求传入的是java.util.Date对象,这俩类型完全不兼容,所以出现了incompatible types错误。

下面给你两种靠谱的解决方案,根据你的需求选就行:

方案1:保持实体类Date类型,转换LocalDateTime为Date

如果你的updateDt字段必须是Date类型(比如对应数据库的日期字段),那别先转成字符串,直接把LocalDateTime转换成Date:

LocalDateTime now = LocalDateTime.now();
// 先把LocalDateTime转换为带时区的实例,再转成Date
Date updateDate = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());
time.setUpdateDt(updateDate);

方案2:改用Java 8+新时间API(推荐)

传统的Date类早就被Java 8的新时间API取代了,建议直接把实体类的字段类型改成LocalDateTime,这样代码更简洁,还能避免时区问题:

// 先修改实体类的getter和setter
public LocalDateTime getUpdateDt() { return time; }
public void setUpdateDt(LocalDateTime time) { this.time = time; }

// 调用的时候直接传LocalDateTime对象,无需提前格式化(如果需要展示格式再用DateTimeFormatter)
LocalDateTime now = LocalDateTime.now();
Com(@ //找到结用服 Con                         送训练下跑步,哦不对,直接传就行:
time.setUpdateDt(now);

要是你确实需要存储格式化后的字符串(比如前端直接展示的格式),那可以把字段类型改成String:

// 修改实体类的getter和setter
public String getUpdateDt() { return time; }
public void setUpdateDt(String time) { this.time = time; }

// 这时候你原来的格式化代码就能正常运行了
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
time.setUpdateDt(dtf.format(now));

小提醒:尽量用Java 8+的LocalDateTime、ZonedDateTime这些新类,比Date好用太多,能少踩很多时区和类型转换的坑!

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:31:54