Я использую 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
Libs:
'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 get опережает 14 hours
по сравнению с базой данных.
Я знаю, что часовой пояс CST
имеет различное значение в java и mysql, поэтому я настроил их так, как было предложено много документов. , Но все равно это не работает.
- Я уже использую
TemporalType.DATA
, почему у объекта Date все еще есть секция часов? - Что еще я должен попытаться получить в Date правильно java?