0%

java时间时区异常

应用中时区异常

操作系统时区

ubuntu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查看当前系统时间
date -R

#时区设置
tzselect
4 Asia
9 China
1 Beijing Time
1 Yes

#复制文件
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#检查 CST(北京) UTC(格林尼治标准时间)
date -R

数据库时区

mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql -uroot -p123456

#查看时区 system_time_zone CST; time_zone CST
show variables like '%time_zone%';

select now();
select curtime();
#返回08:00表示为北京时间
select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);

select now();
show variables like '%time_zone%';
set global time_zone = '+8:00';
# 立即生效,其实没效果;只要重连就可以
flush privileges;

vi /etc/mysql/my.cnf
#mysqld下添加
default-time_zone = '+8:00'

#重启
service mysql restart

java 应用层面

  1. 在 jdbc 的 url 加上参数
1
2
3
4
5
serverTimezone=GMT%2B8
serverTimezone=Asia/Shanghai

&serverTimezone=UTC
&serverTimezone=Asia/Hongkong
  1. jvm 环境指定时区
1
2
-Duser.timezone=Asia/Shanghai
export TZ=Asia/Shanghai
  1. 通过代码指定
1
2
final TimeZone timeZone = TimeZone.getTimeZone("GTM+8");
TimeZone.setDefault(timeZone);