从1-5步依次去获取,如果第一步没有获取到就进入第二步获取依次类推。
1.getDefaultInAppContext() -- no TimeZone.setDefault()
2.defaultTimeZone -- no TimeZone.setDefault()
3.检查系统变量user.timezone -- no compile option
4.native方法 openJDK c代码:
/lib/tzmappings 查找TZ -- not exist
/etc/timezone -- not exist
/etc/localtime -- exist
(发现问题,jdk如果发现/etc/localtime是软连接,就会读取软连接包括路径,在这个软连接中搜索字符串"zoneinfo/",如果没有就返回null,有的话取后面的字符串作为时区文件名,然后去java.home/lib/zi/目录下去找相应的data格式的文件,进而解析出时区和夏令时,华为的问题有两个,一个是之前他们的时区文件放在了/etc/CGP下,导致jdk搜索不到"zoneinfo/",结果返回null,导致java只能用GMT时间;第二个问题是即使把CGP放到zoneinfo/下,时区正常,但夏令时不正常,是因为java得到CGP文件名后去java.home/lib/zi/目录下找,结果没找到,然后就自己制作了一个GMT+08:00这个变量,付给了user.timezone,导致时区正常,但这个东西不能表示夏令时,所以导致夏令时有问题,具体可以看TimeZone.setDefaultZone()函数)
5.GMT
java 获取时区
原创
©著作权归作者所有:来自51CTO博客作者hgqxjj的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:zookeeper 入门与实践
下一篇:系统丢包问题分析
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
获取IP地址
端点(API接口)访问获取IP地址!
IP Java SpringBoot\ -
根据ip地址查找本地时区ip地址 php
-
java根据本地Ip获取mac地址
下面这个方法是获取客户端请求地址
javaWeb学习笔记 .net java i++ 数组长度