首页 > 解决方案 > 如何将字符串转换为 java.sql.Date?

问题描述

我需要将格式为“jan 25,2021”的字符串转换为格式为“2021-01-25”的 java.sql.date。我尝试使用此代码:

String date = "jan 25,2021";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date booking_date=null;
try{
java.util.Date util_date = format.parse(date);
booking_date = new Date(util_date.getTime());
}
catch(ParseException e){
            System.out.println(e);
        }

但总是抛出 ParseException。错误在哪里?

标签: javadatejdbc

解决方案


我需要将格式为“jan 25,2021”的字符串转换为格式为“2021-01-25”的 java.sql.date。我尝试使用此代码:

这就像在问:“我如何将绘画转换为音频文件”——这两个概念是不相关的。它们听起来相关(2021 年 1 月 25 日是一个日期,嗯,java.sql.Date它就在名称中,不是吗),但它们不是:java.sql.Date用词不当- 它根本不代表日期;它代表了一个瞬间。哪个不是日期:如果我拍手问世界各地的每个人我这样做的日期是什么时候,你会得到至少 2 个不同的答案,从而证明这 2 个不一样。

正确的解决方案是使用不会出现此类错误的较新 API:

DateTimeFormatter FORMAT = DateTimeFormatter.ofPattern("MMM dd,uuuu", Locale.ENGLISH);
LocalDate ld = LocalDate.parse("jan 25,2021", FORMAT);

我希望.setObject(x, someLocalDate)作为日期值工作,但如果它没有(它可能不是 - mysql 是出了名的糟糕,它的 JDBC 驱动程序也很可疑),至少从正确的表示(LocalDate)转换为损坏的一个(java.sql.Date)尽可能晚-不要让那个错误感染你的java代码。反之亦然:检索日期时,请使用.getObject(idx, LocalDate.class),如果不起作用,请立即从损坏的转换java.sql.Date为正确java.time.LocalDate的,尽可能防止该错误感染您的 java 代码。


推荐阅读