gpt4 book ai didi

Java JPA 日期提前 14 小时

转载 作者:行者123 更新时间:2023-12-04 10:27:06 24 4
gpt4 key购买 nike

我正在使用 JPA查询mysql数据库在 CentOS6 .

环境信息:

[~]# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

[~]# mysql --version
mysql Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL)

[~]# tomcat version
Server version: Apache Tomcat/7.0.78
Server built: Jun 9 2017 19:56:49 UTC
Server number: 7.0.78.0
OS Name: Linux
OS Version: 2.6.32-754.17.1.el6.x86_64
Architecture: amd64
JVM Version: 1.8.0_121-b13
JVM Vendor: Oracle Corporation

[~]# date
Mon Mar 9 01:21:20 CST 2020

[~]# date -R
Mon, 09 Mar 2020 01:21:23 +0800

[~]# ls -al /etc/localtime
lrwxrwxrwx 1 root root 33 Jun 3 2015 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

/etc/my.cnf
[mysqld]
default-time-zone='+08:00'

MySQL的时区配置:
show variables like '%time_zone%';
----
system_time_zone CST
time_zone +08:00

库:
'mysql:mysql-connector-java:8.0.19',
'org.hibernate:hibernate-entitymanager:5.0.12.Final',
'org.springframework.data:spring-data-jpa:1.9.6.RELEASE',

连接字符串:
db.url=jdbc:mysql://localhost:3306/saa?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai

JPA映射:
import java.util.Date;

public class XXX {
@Column(name = "date")
@Temporal(TemporalType.DATA)
private Date date;

//...
}

mytable有一个 DATE类型栏 date
select DATE_FORMAT(date, '%Y-%m-%d %H:%i:%S'), UNIX_TIMESTAMP(date) from mytable;
----
'2018-12-31 00:00:00', '1546185600'

Java查询:
logger.debug("{}({})", DateFormatUtils.ISO_DATETIME_FORMAT.format(date), date.getTime());
----
2018-12-31T14:00:00(1546236000000)

如您所见,java 获取的日期是 14 hours领先于数据库中的那个。

我知道 CST时区在 java 和 mysql 中的含义不同,所以我将它们配置为很多文档建议。但它仍然不起作用。
  • 我已经用过 TemporalType.DATA ,为什么Date对象还有小时部分?
  • 我还应该尝试在 Java 中获得正确的日期吗?
  • 最佳答案

    redis 缓存 jdbc 字符串没有时查询的值 serverTimezone=Asia/Shanghai在查询字符串中。

    使用后serverTimezone=Asia/Shanghai并删除缓存,它现在可以读取具有正确时区的日期。

    MySQL Connector/J 8.0 Developer Guide声明,它没有属性 useLegacyDatetimeCode,所以只有 serverTimezone=Asia/Shanghai是必须的。

    关于Java JPA 日期提前 14 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60590256/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com