关于Java和MySQL的时间使用问题

发布时间:2023年12月20日

一、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")

?

文章来源:https://blog.csdn.net/qq_23388169/article/details/135097576
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。