dedecms 门户网站制作,网页设计图片对齐方式,免费开发游戏,wordpress分类目录表服务器执行date命令显示时间正确 执行timedatectl status命令结果如下#xff1a; 看起来是Time zone没有设置好#xff0c;但是登录另外一台正常的服务器#xff0c;执行timedatectl status也是一样的
直接写一个简单的Java程序TestTimeZone.java#xff1a;
import ja…服务器执行date命令显示时间正确 执行timedatectl status命令结果如下 看起来是Time zone没有设置好但是登录另外一台正常的服务器执行timedatectl status也是一样的
直接写一个简单的Java程序TestTimeZone.java
import java.util.TimeZone;public class TestTimeZone{public static void main(String[] args) {System.out.println(TimeZone.getDefault());}
}编译运行 javac TestTimeZone.java java TestTimeZone
分别在两台服务器上运行对比结果
//错误时区
sun.util.calendar.ZoneInfo[idGMT,offset0,dstSavings0,useDaylightfalse,transitions0,lastRulenull]//正确时区
sun.util.calendar.ZoneInfo[idAsia/Chungking,offset28800000,dstSavings0,useDaylightfalse,transitions19,lastRulenull]阅读JDK源码大致整理了一下Java获取默认时区的流程
读取系统属性user.timezone(VM options)读取环境变量 TZ 的值读取文件/etc/timezone的值查找 /etc/localtime文件如果文件/etc/localtime是软链接则直接读取软链的路径和文件名作为时区如果文件/etc/localtime不是软链接而是一个普通文件则去/usr/share/zoneinfo目录下读取时区文件进行内容匹配匹配到内容一致的文件名作为时区如果都找不到则以GMT作为默认时区
检查两台服务器进行验证可以确定user.timezone和TZ都是没有设置的然后/etc/timezone文件也没有排除掉前3个 查看/etc/localtime文件不是软链接是一个普通文件
对 /etc/localtime进行查看 先查看时区正确的机器对比/etc/localtime文件和/usr/share/zoneinfo/Asia/Chungking文件内容是相同的 再查看时区错误的机器/etc/localtime文件内容和时区正确的机器相同但是/usr/share/zoneinfo/Asia/Chungking文件内容不知为何被修改了
至此已经定位到原因实际上即使时区正确的机器时区设置也不太合理 解决问题的办法很多可以通过把/etc/localtime软链到时区文件解决 我这里直接采用timedatectl set-timezone Asia/Shanghai命令的方式(实际也是通过软链的方式)
保险起见同时创建/etc/timezone文件并设置内容为Asia/Shanghai