1、引申:
前端如果传年月日必须使用LocalDate接收 ,添加:@JsonFormat(pattern = “yyyy-MM-dd”,timezone=“GMT+8”) 注解。
前端如果传年月日时分秒必须使用LocalDateTime接收 ,添加:@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)注解。
2、问题:
由于MySQL数据库的时间默认格式是yyyy-MM-dd HH:mm:ss,带有时分秒,如果前端传年月日(yyyy-MM-dd) 格式就查询不到 开始时间和结束时间为同一天的数据。
3、解决方案:
方案一:将数据库格式转为yyyy-MM-dd
DTO使用String类型来接受前端的时间参数,DO、VO使用时间类型和数据库对应
DATE_FORMAT(start_time,'%Y-%m-%d') >= 开始时间 and DATE_FORMAT(end_time,'%Y-%m-%d') <= 结束时间
方案二:将时间参数格式转为yyyy-MM-dd HH:mm:ss
/**
* @author lijin
* @version 1.0
* @date 2022/10/24 15:26
*
* 解决前端传localDate 格式数据,开始时间和结束时间同一天查询不到数据问题
*/
public class TimeConvertUtils {
public static LocalDateTime startTimeConvert(LocalDate localDate){
if (ObjectUtil.isNotEmpty(localDate)){
LocalTime suffix = LocalTime.of(00, 00, 00);
return LocalDateTime.of(localDate, suffix);
}
return null;
}
public static LocalDateTime endTimeConvert(LocalDate localDate){
if (ObjectUtil.isNotEmpty(localDate)){
LocalTime suffix = LocalTime.of(23, 59, 59);
return LocalDateTime.of(localDate, suffix);
}
return null;
}
}