在您的情况下,mysql类型为DATETIME,而Java 8类型为LocalDateTime。
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateAsString, fmt);
String dateAsString = dateTime.format(fmt);
Run Code Online (Sandbox Code Playgroud)
如果驱动程序符合JDBC 4.2(最新版本的mysql Java连接器应兼容),则可以执行以下操作:
LocalDateTime dateTime = rs.getObject(1, LocalDateTime.class);
preparedStatement.setObject(1, dateTime);
Run Code Online (Sandbox Code Playgroud)
如果您的驱动程序还不兼容,则可以像在Java 8之前一样存储/检索该DATETIME字段java.sql.Timestamp。
然后,您可以使用以下方法进行来回转换LocalDateTime:
//from LocalDateTime to Timestamp:
java.time.LocalDateTime dateTime = LocalDateTime.parse(dateAsString, fmt);
java.sql.Timestamp ts = Timestamp.valueOf(dateTime);
//from Timestamp to LocalDateTime:
java.sql.Timestamp ts = resultSet.getTimestamp();
java.time.LocalDateTime dateTime = ts.toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)
最适合处理以下格式的日期和时间的 MySQL 和 Java 数据类型是什么:yyyy.MM.dd hh:mm:ss
最合适的 MySQL 类型是 DATETIME。请参阅我应该使用字段“日期时间”还是“时间戳”?。
在持久层中使用的相应 Java 类型(jdbc 类型)是 java.sql.Timestamp。请参阅Java、JDBC 和 MySQL 类型。
我需要能够将日期和时间的字符串表示形式转换为给定的日期格式,然后将该日期和时间存储在数据库中。
正确的变换是:java.lang.String -> java.util.Date -> java.sql.Timestamp.
java.lang.String -> java.util.Date:Date javaDatetime = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss").parse(stringDatetime);
java.util.Date -> java.sql.Timestamp:Timestamp jdbcDatetime = new Timestamp(javaDatetime.getTime());
然后我需要执行相反的操作,将 MySQL 日期和时间转换为相应的 Java 表示形式
执行相反的路径:
java.sql.Timestamp -> java.util.Date:Date javaDatetime = new java.util.Date(jdbcDatetime.getTime());
java.lang.Date -> java.util.String:String stringDatetime = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss").format(javaDatetime);
我已经言简意赅了。您必须注意 SimpleDateFormat 的使用(例如缓存已使用 applyPattern 和 setLenient 初始化的实例)。
Java 8 的更新对 jdbc 类型(请参阅JDBC 4.2 ) 进行了一些增强,以简化转换。对于上面说明的情况,您可以使用toLocalDateTime和valueOf在 java.sql.Timestamp 和新的 java.time.LocalDateTime 之间进行转换。
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |