如何将日期字符串转为yyyyMMdd格式Java.sql.Date并存入SQL?
解决Java日期转换与格式化问题
核心说明
java.sql.Date本身是存储日期数值的对象,它的toString()方法默认输出yyyy-MM-dd格式,但这只是它的字符串表现形式。要得到yyyyMMdd格式的结果,需要单独做格式化处理;同时废弃的Date(int year, int month, int day)构造方法,我们用Java 8+推荐的java.time包API替代。
实现步骤与代码示例
1. 解析输入字符串并转换为java.sql.Date
使用LocalDate(Java 8+日期API)解析输入字符串,再通过java.sql.Date.valueOf()方法转换为java.sql.Date对象,这是替代废弃构造方法的标准方式:
import java.time.LocalDate; import java.sql.Date; public class DateConvertDemo { public static void main(String[] args) { String fromUser = "2002-10-29"; // 解析字符串为LocalDate LocalDate localDate = LocalDate.parse(fromUser); // 转换为java.sql.Date Date sqlDate = Date.valueOf(localDate); // 直接打印sqlDate会输出默认格式:2002-10-29 System.out.println("默认sqlDate输出:" + sqlDate); } }
2. 格式化为yyyyMMdd纯数字字符串
如果需要得到20021029格式的结果,使用DateTimeFormatter进行格式化,既可以直接格式化LocalDate,也可以格式化java.sql.Date(它实现了java.time.temporal.TemporalAccessor接口):
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.sql.Date; public class DateFormatDemo { public static void main(String[] args) { String fromUser = "2002-10-29"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); // 方式1:格式化LocalDate LocalDate localDate = LocalDate.parse(fromUser); String formattedStr1 = localDate.format(formatter); System.out.println("格式化LocalDate结果:" + formattedStr1); // 输出20021029 // 方式2:格式化java.sql.Date Date sqlDate = Date.valueOf(localDate); String formattedStr2 = formatter.format(sqlDate); System.out.println("格式化sqlDate结果:" + formattedStr2); // 输出20021029 } }
为什么之前用SimpleDateFormat没得到想要的结果?
你之前用SimpleDateFormat得到yyyy-MM-dd,大概率是直接打印了java.sql.Date对象——它的toString()方法硬编码了yyyy-MM-dd格式,和你用的格式化工具无关。必须显式调用格式化方法,才能得到自定义格式的字符串。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

