关键词:
技术活,该赏
点赞再看,养成习惯
源码分析
TimeZone.getDefault() 是JDK自带的方法,所属包:java.util;方法返回此主机(程序运行的主机)的默认时区
//TimeZone类
public static TimeZone getDefault()
return (TimeZone) getDefaultRef().clone();
我们来看下默认时区是怎么取值的
1、java.util.TimeZone类中getDefault方法的源代码显示,它最终是会调用sun.util.calendar.ZoneInfo类的getTimeZone 方法。这个方法为需要的时间区域返回一个作为ID的String参数。
2、时间ID zoneID的获取方式:先从JVM中的user.timezone变量中读取,如果读不到,再读取系统的默认时区
zoneID = getSystemTimeZoneID(javaHome);
/**
* Gets the platform defined TimeZone ID.
**/
private static native String getSystemTimeZoneID(String javaHome);
看到这个native ,说明已经挖到核心了,到了这一步,还是不清楚是怎么获取系统的默认时区的,那怎么办,JDK代码只能跟到这里。
转战OpenJDK,源码下载方式:https://gitee.com/mirrors/openjdk
传送门:要探索JDK的核心底层源码,那必须掌握native用法
3、如果再读不到,就用默认的 GMT_ID = "GMT"
使用默认时区的风险
当JVM中的user.timezone变量没有设值,由上面的源码分析可知,会读取当前系统的默认时区。
风险就出在这里,如果安装系统时时区没有设置好,会导致程序获取的默认时区跟我们想要的不一样,这时候程序就会出现异常。
避免风险最佳实践
JVM中的user.timezone变量中设置时区
推荐相关文章
hutool日期时间系列文章
2DateUtil(时间工具类)-常用的时间类型Date,DateTime,Calendar和TemporalAccessor(LocalDateTime)转换
9LocalDateTimeUtil(JDK8+中的@link LocalDateTime 工具类封装)
10TemporalAccessorUtil@link TemporalAccessor 工具类封装
其他
jdk获取默认时区风险(代码片段)
源码分析TimeZone.getDefault()是JDK自带的方法,所属包:java.util;方法返回此主机(程序运行的主机)的默认时区//TimeZone类publicstaticTimeZonegetDefault()return(TimeZone)getDefaultRef().clone();2021年最新阿里P7Java面试 查看详情
jdk获取默认时区风险(代码片段)
源码分析TimeZone.getDefault()是JDK自带的方法,所属包:java.util;方法返回此主机(程序运行的主机)的默认时区//TimeZone类publicstaticTimeZonegetDefault()return(TimeZone)getDefaultRef().clone();我们来看下默认时区是怎么取值的1、ja... 查看详情
《jdk源码分析》相关系列目录(java小虚竹)
...赞👍收藏⭐再看,养成习惯最近抽空整理了《JDK源码分析》相关系列的文章,下面是《JDK源码分析》相关系列的目录,方便查阅。若文章有错误或纰漏,请不吝指正。谢谢入门需知要探索JDK的核心底层源码... 查看详情
获取 iPhone 与 iPod Touch 时区的最佳实践
】获取iPhone与iPodTouch时区的最佳实践【英文标题】:bestpracticetoobtaintimezoneforiPhonevsiPodTouch【发布时间】:2010-04-1007:47:13【问题描述】:我正在创建一个需要用户当前时区的应用。如果正在使用的设备是iPhone,并且用户将时区设置... 查看详情
什么是分析和性能测试 python 代码的最佳实践和工具? [复制]
】什么是分析和性能测试python代码的最佳实践和工具?[复制]【英文标题】:Whatsarebestpracticesandtoolsforprofilingandperformancetestingpythoncode?[duplicate]【发布时间】:2012-02-2300:54:26【问题描述】:可能重复:Howtoprofilemycode?什么是分析和性... 查看详情
当数据依赖于日期时间时,在数据库中保存日期时间和时区信息的最佳实践
】当数据依赖于日期时间时,在数据库中保存日期时间和时区信息的最佳实践【英文标题】:Bestpracticeswithsavingdatetime&timezoneinfoindatabasewhendataisdependantondatetime【发布时间】:2017-12-1110:38:07【问题描述】:关于在DB中保存日期时... 查看详情
深入理解java虚拟机(jvm高级特性与最佳实践)读后感(代码片段)
...08;第3版)前言一、自己编译JDK1.1实验系统环境1.2获取源码1.3构建编译环境1.4安装"BootStrapJDK"1.5进行编译1.5.1编译前准备1.5.2了解OpenJDK编译参数1.5.3正式编译1.5.3.1依赖项检查、参数配置和构建输出目录结构等1.5.3.2执行整... 查看详情
jdk源码之reentrantlock源码分析(代码片段)
ReentrantLock类似于synchronized是一种独占式锁(悲观锁),是基于AQS实现的轻量级锁,相比于synchronized优点在于:可自由选择锁的获取方式:公平锁和非公平锁支持可重入锁,即一个线程可以多次获取锁支持设置获... 查看详情
c++智能指针最佳实践&源码分析(代码片段)
...能指针可以解决的问题,用法及最佳实践。并且根据源码分析智能指针的实现原理。一、为什么需要使用智能指针1.1内存泄漏C++在堆上申请内存后,需要手动对内存进行释放。代码的初创者可能会注意内存的释放... 查看详情
jdk8函数式编程最佳实践(代码片段)
文章导航JDK8函数式编程最佳实践1.Lambda表达式的重要接口1.1新增的函数接口1.1无参数,无返回值类型接口1.2无参数,有返回值类型接口1.3有参数,也有返回值的类型接口2.方法引用2.1静态方法引用2.2实例方法引用2.3构... 查看详情
guavacache原理分析与最佳实践(代码片段)
在大部分互联网架构中Cache已经成为了必可不少的一环。常用的方案有大家熟知的NoSQL数据库(Redis、Memcached),也有大量的进程内缓存比如EhCache、GuavaCache、Caffeine等。本系列文章会选取本地缓存和分布式缓存(NoS... 查看详情
应用统计|移动端数据统计和分析最佳实践(代码片段)
...已成为过去时。大环境的改变,也导致移动端的数据统计分析在产品的研发、决策、运营等方面起着越来越重要的作用,“精细化运营”一时间成为热点词——从大厂到创业团队,无论是自建数据统计系统还是借助于第三方,市... 查看详情
docker容器安全的8大风险和33个最佳实践丨idcf
作者:StackRox译者:冬哥原文:https://www.stackrox.io/blog/docker-security-101/容器以及例如Kubernetes等编排器开启了应用程序开发方法的新时代,支持微服务架构以及持续开发和交付。根据我们最新的容器状态和Kubernetes安... 查看详情
threadlocal源码分析(代码片段)
1、个人总结和想法:(1)、ThreadLocal的内存泄漏问题?ThreadLocal我们应该关注它的内存泄漏问题,原因虽然JDK开发者已经使用了弱引用的键来尝试解决这个问题,不过是依然存在很大风险的,因为当使用static的ThreadLocal时会使其... 查看详情
jvm源码分析之警惕存在内存泄漏风险的finalreference(增强版)
概述JAVA对象引用体系除了强引用之外,出于对性能、可扩展性等方面考虑还特地实现了四种其他引用:SoftReference、WeakReference、PhantomReference、FinalReference,本文主要想讲的是FinalReference,因为我们在使用内存分析工具比如mat等在... 查看详情
netty学习(源码分析)(代码片段)
源代码目录JavaIO到NettyNIO基础NIO的特点NIO怎么实现的同步非阻塞JavaBIO与NIO比较BIO(传统IO)伪异步IO模式NIO(Non-blocking/NewI/O)BIO和NIO对比AIO模式文件AIO网络通信AIOBIO、NIO和AIO区别零拷贝传统IO的问题NIO的优化sendFilel... 查看详情
C# 继承最佳实践
...内容的方法。我的问题是,虽然这很好用,但在运行代码分析时,我被警 查看详情
jdk源码分析arraylist的size()==0和isempty()
先看结果 分析源码【jdk源码解析】jdk8的ArrayList初始化长度为0java的基本数据类型默认值无参构造size()方法isEmpty()方法 查看详情