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

Java中yyyy-MM-dd转LocalDateTime报错及数据库查询问题

解决yyyy-MM-dd日期转LocalDateTime及数据库查询问题

1. 正确解析yyyy-MM-dd为LocalDateTime

直接用LocalDateTime.parse()解析仅含日期的字符串会报错,因为输入缺少时间维度信息。推荐两种解决方式:

方式一:先转LocalDate再补全时间

先将字符串解析为LocalDate,再补充当天起始/指定时间转为LocalDateTime:

String inputDate = "2023-02-26";
// 解析为LocalDate
LocalDate localDate = LocalDate.parse(inputDate);
// 转为当天00:00:00的LocalDateTime
LocalDateTime startOfDay = localDate.atStartOfDay();
// 若要指定具体时间,比如12:00:00
LocalDateTime customTime = localDate.atTime(12, 0, 0);

方式二:自定义DateTimeFormatter补默认时间

通过Formatter自动补全缺失的时间字段:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd")
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
        .toFormatter();
LocalDateTime localDateTime = LocalDateTime.parse(inputDate, formatter);

2. 用该日期查询数据库LocalDateTime类型数据

数据库存储的LocalDateTime包含时间部分,绝对不能用等于判断(会漏掉当天非00:00的记录),必须用范围查询覆盖当天所有时间:

SQL查询示例

SELECT * FROM your_table 
WHERE create_time >= '2023-02-26 00:00:00' 
AND create_time < '2023-02-27 00:00:00';

Java代码(Spring Data JPA示例)

方式1:用内置查询方法

// 仓库接口定义方法
List<YourEntity> findByCreateTimeBetween(LocalDateTime start, LocalDateTime end);

// 调用时生成时间范围
LocalDate inputDate = LocalDate.parse("2023-02-26");
LocalDateTime start = inputDate.atStartOfDay();
LocalDateTime end = inputDate.plusDays(1).atStartOfDay();
List<YourEntity> result = yourRepository.findByCreateTimeBetween(start, end);

方式2:自定义JPQL查询

@Query("SELECT e FROM YourEntity e WHERE e.createTime >= :start AND e.createTime < :end")
List<YourEntity> findByDateRange(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);

关键注意点

  • 用< 次日00:00替代<= 当日23:59:59,避免遗漏毫秒级的末尾数据(如23:59:59.999)。
  • 不要直接将LocalDate与数据库的LocalDateTime字段做等值匹配,会导致类型不兼容或数据遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:01