java - 最适合存储日期和时间的 SQL 和 Java 数据类型

标签 java mysql date time java-8

<分区>

提前为这个有点宽泛的问题道歉。

使用以下格式处理日期和时间最合适的 MySQL 和 Java 数据类型是什么:yyyy.MM.dd hh:mm:ss

我需要能够将日期和时间的字符串表示形式转换为给定的日期格式,然后将该日期和时间存储在数据库中。然后我需要执行相反的操作,将 MySQL 日期和时间转换为相应的 Java 表示

我已经阅读了很多关于 Date、DateTime、ZonedDateTime 的问题,但这些问题似乎都不太奏效。

谢谢。

最佳答案

在您的情况下,mysql 类型将是 DATETIME,而 Java 8 类型将是 LocalDateTime

String与LocalDateTime的转换

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss");

LocalDateTime dateTime = LocalDateTime.parse(dateAsString, fmt);
String dateAsString = dateTime.format(fmt);

与数据库交互(JDBC 4.2 兼容驱动程序)

如果驱动兼容JDBC 4.2(最新版本的mysql Java连接器应该是兼容的),你可以这样做:

LocalDateTime dateTime = rs.getObject(1, LocalDateTime.class);
preparedStatement.setObject(1, dateTime);

不合规的司机

如果您的驱动程序还不兼容,您可以像在 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();

关于java - 最适合存储日期和时间的 SQL 和 Java 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150175/

相关文章:

java - 如何以 O(n) 的时间复杂度找到总和为 k 的所有子数组?

java - 在实体和 DTO 之间映射非空字段的最佳方法是什么?

java - 我可以将数组复制到哈希表吗?

date - D3.js- 如何将刻度值格式化为季度而不是月

java - 在 Java 中将日期转换为新的时区

python - Django 按预订日期过滤外键

java - JTable 在单元格中添加 2 个迷你按钮

php - Eloquent 地同时在多个表上使用嵌套的 json 结果,如 'with' 所做的

sql - 从连接的 MySQL 表中选择最新条目

php - MySQL-选择日期范围以及每个日期的过夜时间