是的,yyyy-MM-dd 是 ISO 8601 格式的日期,没有时间和时区。
要使用 JDBC 4.2 或更高版本的驱动程序或现代 JPA 实现(例如 Hibernate 5)存储到 SQL 数据库中,您无需使用 Date 对象(无论您的意思是 java.util.Date 还是 @ 987654330@)。我建议您改用 java.time,这是现代 Java 日期和时间 API。用于没有时间的日期的类是LocalDate。并且您可以将一个存储到您的数据库中而无需任何转换。
LocalDate 默认解析 ISO 8601 格式,即没有任何显式格式化程序:
String receivedString = "1962-11-27";
LocalDate dateOfBirth = LocalDate.parse(receivedString);
System.out.println("Date of birth is " + dateOfBirth);
LocalDate 在我们打印时也会返回 ISO 8601 格式:
出生日期是 1962-11-27
不过,我还没有给你完整的故事。 yyyy-MM-dd 是迄今为止最常用的扩展 格式。还有一种基本格式,因为它省略了连字符,所以更紧凑:yyyyMMdd。我建议您坚持以扩展格式获取日期字符串。如果你不能这样做,你将不得不指定一个格式化程序来解析:
String receivedString = "19621127";
LocalDate dateOfBirth = LocalDate.parse(
receivedString, DateTimeFormatter.BASIC_ISO_DATE);
这会给你一个LocalDate,与我们之前的相同且无法区分。
使用 JDBC 保存到数据库中:
PreparedStatement pStmt
= yourDatabaseConnection.prepareStatement(
"insert into your_table (date_of_birth) values (?);");
pStmt.setObject(1, dateOfBirth);
int insertedRows = pStmt.executeUpdate();
注意使用setObject(),而不是setDate()。
链接