一、MySQL中的日期时间类型和Java中的日期时间类型对应关系
二、时间使用中的一些最佳实践
(1)application.yml文件里面进行如下配置
url: jdbc:mysql://localhost:3307/date_learn?useUnicode=true&characterEncoding=utf-8&useTimezone=true&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
注意:上面使用了 useTimezone=true 这个参数。这个参数的含义如下;
在 JDBC 驱动程序中,
useTimezone
?参数的默认值是?false
,而不是?true
。
useTimezone
?参数指示驱动程序是否应该使用客户端的时区设置。默认情况下,驱动程序会在连接数据库时将时区设置为服务器的时区。
如果将?useTimezone
?参数设置为?true
,驱动程序将使用客户端的时区设置。这意味着 MySQL 数据库将使用客户端时区执行日期时间计算和比较。这可以确保数据库操作与客户端应用的时区保持一致。
补充说明:
?在这里,"客户端时区"指的是您连接到数据库的应用程序所在的计算机或服务器的本地时区设置。当与数据库建立连接时,JDBC 驱动程序可以选择使用客户端的时区设置或服务器的时区设置来处理日期和时间。
具体来说,当
useTimezone
参数设置为true
时,驱动程序将使用客户端的时区设置。这意味着数据库将使用客户端时区来执行日期和时间计算和比较。这样可以确保数据库操作与应用程序所在的时区保持一致。例如,假设您的应用程序运行在位于美国东部时间(EST)的服务器上,如果将
useTimezone
参数设置为true
,那么数据库操作将基于美国东部时间进行。这就意味着,在日期和时间计算中将考虑美国东部时间的偏移量,即 “-05:00”。需要注意的是,设置
useTimezone
参数为true
并不会更改数据库服务器的实际时区设置,仅在进行日期和时间计算时使用客户端时区。数据库服务器的时区由其自身的配置决定。
(2)实体类中的时间字段都统一使用 java.util.LocalDateTime类型,那么在实体类上标注如下注解:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 就可以了
?(3)如果老项目中的实体类中的时间字段使用的是 java.util.Date类型,那么在实体类上标注?
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
?