MySQL Date和DateTime
MySQL Date和DateTime
Date
- 存储: 仅存储日期值,格式为
YYYY-MM-DD
。 - 范围: 从
1000-01-01
到9999-12-31
。 - 用途: 当你只需要年月日信息时使用。
DateTime
- 存储: 存储日期和时间值,格式为
YYYY-MM-DD HH:MM:SS
。 - 范围: 在MySQL中,例如,从
1000-01-01 00:00:00
到9999-12-31 23:59:59
。 - 用途: 当你需要存储时间点信息时使用,包括年月日以及时分秒。
TIMESTAMP和DateTime
TIMESTAMP
:也用来存储日期和时间,格式与DATETIME
相同,但是它具有时间戳的特性,能够自动记录数据的修改和插入时间。TIMESTAMP
的值是以UTC时间为基础的,当你插入或者读取数据时,它会自动转换为当前时区的时间。TIMESTAMP
的表示范围通常比DATETIME
小,从1970-01-01 00:00:01
UTC到2038-01-19 03:14:07
UTC。
Java类 LocalDate 和 LocalDateTime 的对应
LocalDate
- 对应: 对应数据库中的
Date
类型。 - 存储: 仅存储日期信息,没有时间或时区。
- 用途: 当你在Java程序中只需要年月日信息时使用。
LocalDateTime
- 对应: 对应数据库中的
DateTime
类型。 - 存储: 存储日期和时间信息,没有时区信息。
- 用途: 当你在Java程序中需要年月日以及时分秒信息时使用,但不考虑时区。
与数据库交互
JDBC 4.2 及以上版本
JDBC 4.2 及以上版本不需要额外处理数据转换
JDBC 4.2 及以下版本
JDBC 4.2 以下版本需要额外处理,通常需要将 LocalDate
和 LocalDateTime
转换为数据库理解的格式,或者反之。以下是如何进行这些转换的示例。
将 LocalDate 和 LocalDateTime 转换为数据库格式
1 | import java.sql.Date; |
从数据库格式转换为 LocalDate 和 LocalDateTime
1 | import java.sql.Date; |
注意事项:
- 当将
LocalDate
或LocalDateTime
存储到数据库时,确保数据库连接的时区设置与Java应用程序的时区相匹配,特别是对于LocalDateTime
,因为它不包含时区信息。 - 如果你的应用程序在世界各地使用,考虑使用
ZonedDateTime
或OffsetDateTime
以处理时区问题。 - 从Java 8开始,建议使用
java.time
包中的日期和时间类,因为它们修复了旧java.util.Date
类的许多设计问题,并且是不可变的,这有助于创建更健壮、线程安全的应用程序。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CautionX!