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

如何将字符串转换为java.util.Date以插入MySQL的DATE类型列?

解决字符串日期转java.util.Date存入DATE类型列的方案

看来你需要把前端传入的字符串日期,转换成实体类里的java.util.Date类型,再存入数据库的DATE列对吧?我给你整理几种实用的解决方案:

方法一:用SimpleDateFormat手动解析(传统方案)

这是Java 8之前常用的方式,适合还在维护旧项目的场景。核心是先定义和用户输入匹配的日期格式,再把字符串解析成Date对象,记得处理解析异常哦。

示例代码:

@RequestMapping(value = "/addEvent", method = RequestMethod.POST)
public String addEvent(@RequestParam("startDateStr") String startDateStr, Model model) {
    // 这里要和用户输入的日期格式保持一致,比如用户输入"2024-05-20"就用yyyy-MM-dd
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date startDate = null;
    
    try {
        startDate = dateFormat.parse(startDateStr);
    } catch (ParseException e) {
        // 日期格式不对的话,给前端返回错误提示
        model.addAttribute("error", "请输入正确格式的日期(如:2024-05-20)");
        return "addEvent";
    }
    
    // 赋值给Event对象并保存
    Event event = new Event();
    event.setStartDate(startDate);
    eventService.saveEvent(event);
    
    return "redirect:/events";
}

⚠️ 注意:SimpleDateFormat是线程不安全的,别把它定义成类的静态变量,最好在方法内部创建实例,或者用ThreadLocal包装来保证线程安全。

方法二:用Java 8+新日期API(推荐方案)

如果你的项目用的是Java 8及以上,强烈推荐用这套线程安全的新API,设计更合理,也更不容易出问题。步骤是先把字符串转成LocalDate(只保留日期部分),再转成java.util.Date。

示例代码:

@RequestMapping(value = "/addEvent", method = RequestMethod.POST)
public String addEvent(@RequestParam("startDateStr") String startDateStr, Model model) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDate localDate = null;
    
    try {
        localDate = LocalDate.parse(startDateStr, formatter);
    } catch (DateTimeParseException e) {
        model.addAttribute("error", "日期格式错误,请输入yyyy-MM-dd格式的日期");
        return "addEvent";
    }
    
    // 将LocalDate转成java.util.Date
    Date startDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    
    Event event = new Event();
    event.setStartDate(startDate);
    eventService.saveEvent(event);
    
    return "redirect:/events";
}

方法三:用Spring MVC的@DateTimeFormat直接绑定(最简洁)

Spring MVC自带的注解可以帮你自动完成字符串到Date的转换,不用手动写解析代码,非常省事。

示例代码:

@RequestMapping(value = "/addEvent", method = RequestMethod.POST)
public String addEvent(
        @RequestParam("startDate") 
        @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, 
        Model model) {
    // 直接拿到转换好的Date对象,省去手动解析的步骤
    Event event = new Event();
    event.setStartDate(startDate);
    eventService.saveEvent(event);
    
    return "redirect:/events";
}

如果用户输入的格式不对,Spring会抛出TypeMismatchException,你可以写个全局异常处理器捕获这个异常,返回友好的错误提示给前端。

关键注意点

  • 一定要保证你定义的日期格式和用户输入的完全匹配,比如用户输入05/20/2024,格式就要改成MM/dd/yyyy;
  • 实体类上的@Temporal(TemporalType.DATE)注解不能少,它会告诉JPA只把日期部分存入数据库的DATE列,忽略时间戳的时分秒部分,正好符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:04:44