如何设置JVM时区
www.baeldung/java-jvm-time-zone
1.概述
提到时间戳,⽤户的要求可能⽐想象的要⾼。他们希望程序能够⾃动检测时区,并⽤正确的时区显⽰时间戳。
本⽂将介绍修改JVM时区的⼏种⽅法。此外,还会介绍时区管理相关⼀些陷阱。
2.时区简介
JVM默认会从操作系统读取时区信息。时区信息会传给TimeZone类,它会存储时区并计算夏令时。
调⽤getDefault⽅法将返回应⽤程序所在的时区。此外,还可以调⽤AvailableIDs获取应⽤程序⽀持的时区ID列表。
Java采⽤tz数据库规范命名时区。
3.更改时区
这节将介绍在JVM中更改时区的⼏种⽅法。
3.1.设置环境变量
让我们看看如何使⽤环境变量修改时区。可以添加或修改环境变量TZ。
例如,在Linux中可以使⽤export命令:
exportTZ= "America/Sao_Paulo"
设置环境变量后,程序时区现在变为America/Sao_Paulo:
Calendar calendar = Instance;
TimeZone, TimeZone( "America/Sao_Paulo"));
3.2.设置JVM参数
另⼀种⽅法是设置user.timezone参数。这个JVM参数优先于环境变量TZ。
例如,可以使⽤-D标志启动应⽤程序:
java -Duser.timezone= "Asia/Kolkata"company.Main
同样,也可以通过应⽤程序设置JVM参数:
System.setProperty( "user.timezone", "Asia/Kolkata");
现在可以看到时区变成了Asia/Kolkata:
Calendar calendar = Instance;java环境变量自动配置
TimeZone, TimeZone( "Asia/Kolkata"));
TimeZone, TimeZone( "Asia/Kolkata"));
3.3.在Java程序中设置时区
最后,还可以使⽤TimeZone类在Java应程序中修改JVM时区。这种⽅法的优先级⾼于环境变量和JVM参数。
设置默认时区很容易:
TimeZone.TimeZone( "Portugal"));
不出所料,时区现在变成了Portugal:
Calendar calendar = Instance;
TimeZone, TimeZone( "Portugal"));
4.时间管理陷阱
4.1.使⽤三个字母的时区ID
尽管Java⽀持,但不建议使⽤三个字母的ID表⽰时区。
由于三个字母的ID含糊不清,应该使⽤更长的时区名称。例如,IST可以表⽰印度标准时间、爱尔兰标准时间,也可以是以⾊列标准时间。
4.2.全局设置
请注意,上⾯介绍的⽅法都是为应⽤程序设置全局时区。现在的应⽤程序中,通常设置时区的粒度更细。
例如,可能需要将时间转换为最终⽤户的时区,因此设置全局时区的意义就不⼤了。如果不⽤全局时区,
可以考虑直接在每个date-time实例上指定时区。可以使⽤或ZonedDateTime 或 OffsetDateTime⼯具类。
5.总结
本⽂介绍了⼏种修改JVM时区的⽅法。可以设置系统环境变量、修改JVM参数或者在应⽤程序中⽤编程的⽅式修改。
所有⽰例代码都能在GitHub上到。
(点击标题可跳转阅读)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论