CentOS 7 下设置时区
之前虚拟机跑 VMware 时发现 MySQL 中的时间有误,意识到没设置好系统时区,便按照经验使用以下命令设置时区: cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 一通操作之后,数据库中的时间正常了,但是运行 Kotlin 上的 SpringBoot 后端的时候依然存在时区问题,百思不得其解,遂 Google,结果如下: JVM 获取时区流程: 1) 优先使用环境变量 TZ 的值 2) 在 /etc/sysconfig/clock 中查找 ZONE 的值 3) 对 /etc/localtime 和 /usr/share/zoneinfo 下的时区文件名进行匹配,若匹配成功,则返回对应的路径和文件名 不难看出我们的问题出现在第三步上, 经过验证,Java 是通过文件名匹配时区的,而 /etc/localtime 本身是个符号链接, 也就是说我们通过 cp 修改其内容本质上其实是修改了它指向的文件的内容,而它指向的文件名并没有变化。 此外,date 命令是通过文件内容匹配时区的,这也是为什么执行以上命令后 date 命令可以匹配到正确的时区。 知道了这些,我们很容易想到解决方案:创建时区文件的符号链接到 /etc/localtime,具体操作如下: ln -sf /usr/share/zoneinfo/Asia