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()); } }
测试:
[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]#
联系印尼方测试成功!!!