Java程序与操作系统时区不一致问题的处理

本文探讨了Java程序与操作系统时区不一致的问题,分析了Java获取时区信息的方式,揭示了Linux中CST时区的复杂性。解决方案包括修改/etc/localtime为软链接或设置Java环境变量TZ。对于系统镜像创建者,建议将/etc/localtime设为软链接以避免时区问题。
摘要由CSDN通过智能技术生成

1. 问题现象

最近发现某些服务器上运行的java程序选择的时区是Asia/HarbinAsia/Chungking,而不是我们常见的Asia/Shanghai。由此导致与外部对接方交互时因为时区不同而发生问题。

通过jinfo我们可以查看java程序使用的时区:

[root@centos6 ~]# jinfo 12104 | grep user.timezone
user.timezone = Asia/Harbin

让我们再来看看CentOS的时区:

[root@centos6 ~]# date +"%Z %::z"
CST +08:00:00

2. 原因分析

首先我们来看下Java程序是怎样取得时区信息的。通过Oracle的官方文档,我们可以知道其默认时区的获取方式:

  1. Use the user.timezone property value as the default time zone ID if it's available.
  2. Detect the platform time zone ID. The source of the platform time zone and ID mapping may vary with implementation.
  3. Use GMT as the last resort if the given or detected time zone ID is unknown.

我们可以写一个简单的程序来测试:

DefaultTimeZone.java
public class DefaultTimeZone {
    public static void main(String[] args) {
        System.out.println(java.util.TimeZone.getDefault()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值