Java设置jre通过java new Date()得到的时间的时区

1、前提

  由于公司有印尼的项目,该项目仅对印尼当地开放使用(公司在国内,用的是阿里云的ECS,但是阿里云在印尼没有服务器,所以就买了新加坡的服务器),印尼当地人用的是东七区的时间,所以比国内东八区的时间早一个小时。一开始只是修改了阿里云ECS服务器的系统时间为东七区的时间,但是实际项目获取到的时间仍是东八区时间。

2、动手

  因为之前已经修改了系统的时区为东七区,但是java程序获得的时间还是东八区的时间。查阅相关资料和问了开发的同事之后,做了如下修改:

  1、修改修改/tomcat/bin/catalina.sh,添加如下的参数:

JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+7"  #在东几区就+几

  2、修改/etc/timezone文件

  这个是因为我修改上面的操作之后运行java程序获取的时区还是东八区的,要获取东八区必须加指定参数”-Duser.timezone=GMT+7”,询问了开发之后,表示java程序是通过/etc/timezone文件获取时区的。

cat /etc/timezone 
Asia/Jakarta

  为此还专门写了一个java类来获取时间:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Test {


    public static void main(String[] a) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        System.out.println(df.format(new Date()));// new Date()为获取当前系统时间


        Calendar cal = Calendar.getInstance();
        TimeZone timeZone = cal.getTimeZone();
        System.out.println(timeZone.getID());
        System.out.println(timeZone.getDisplayName());
    }
}
View Code

  测试:

[root@iZt4nbfbkurxm1k2bmdsqvZ bin]# javac Test.java 
[root@iZt4nbfbkurxm1k2bmdsqvZ bin]# java Test
2017-09-27 13:15:45
Asia/Jakarta
West Indonesia Time
[root@iZt4nbfbkurxm1k2bmdsqvZ bin]# 

  联系印尼方测试成功!!!

posted @ 2017-09-27 14:17  StaryJie  阅读(9354)  评论(0编辑  收藏  举报