java、mysql、centos设置时区

12月 13, 2021 |

通过tzselect设置的是登录用户的session时间格式,要改变系统时区,让其他应用程序,比如mysql或者你编写的java程序获取正确的时区。需要改变/etc/localtime符号链接的指向。
方法1,通过timedatectl命令,本质是创建/etc/localtime文件的符号链接
timedatectl set-timezone 'America/New_York'

方法2,通过符号链接
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

查看系统时区
timedatectl

使用场景

  • java TimeZone.getDefault() 默认时区设置
  • mysql 时区设置
    mysql重要的两个系统变量

system_time_zone=CST #系统时区,从操作系统读取
time_zone=System #每个连接使用的时区,可以通过default-time-zone='+0800' 配置项改变

java jdbc时区属性设置

jdbc:mysql://192.168.228.136/employees?connectionTimeZone=%2B0800&forceConnectionTimeZoneToSession=true

  1. connectionTimeZone:指定连接使用的时区
  2. forceConnectionTimeZoneToSession:一个链接有多个session,指定session使用connectionTimeZone设定的值 ,参考Datetime types processing

时区以偏移量指定的时候connectionTimeZone=%2B0800 ,'+'要转义为%2B
如果time_zone使用字符串指定,比如connectionTimeZone=Asia/Shanghai 那么执行
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 将时区字符串和偏移量关系导入数据库,参考官方文档time-zone-installation

Posted in: IT人生, 服务器 | Tags: ,

Comments are closed.