java - 如何将字符串转换为 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。错误在哪里?
解决方案
我需要将格式为“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 代码。
推荐阅读
- flutter - 如何实现这个自定义滑块颤动
- r - 在循环中将数据附加到数据帧,但只有最后一个值进入数据帧
- java - JPA 列不存在
- wordpress - Nginx - Wordpress 子目录重定向循环
- java - 比较/排序元素,然后使用具有 O(n) 复杂度的数组列表对它们进行平方
- tkinter - 在 Tkinter 中更改按钮
- flutter - Flutter 边缘 onFocus FocusNode
- python - python中的凝聚聚类实现
- amazon-web-services - 如何在 AWS S3 生命周期过期前缀规则中使用正则表达式
- python - 如何指定神经网络层中的连接(在 keras 中)?