java程序在linux上报错时区(显示欧洲/都柏林的IST)

我从下面的代码中得到一个错误的时区值(IST)。 它来自bugreport

import java.util.*; import java.text.*; class simpleTest { public static void main(String args[]) { System.out.println("Simple test Josh "); Date now = new Date(); DateFormat df = DateFormat.getDateInstance(); Calendar cal = Calendar.getInstance(); System.out.println("\n TIME ZONE :"+ cal.getTimeZone().getDisplayName()); long nowLong = now.getTime(); String s = now.toString(); System.out.println("Value of milliseconds since Epoch is " + nowLong); System.out.println("Value of s in readable format is " + s); } } 

在都柏林,这个区域是错误的。 它显示IST

 $ java -Duser.timezone=Europe/Dublin simpleTest Simple test Josh TIME ZONE :Greenwich Mean Time Value of milliseconds since Epoch is 1408095007238 Value of s in readable format is Fri Aug 15 10:30:07 IST 2014 

这个没关系

 $ java -Duser.timezone=Europe/Helsinki simpleTest Simple test Josh TIME ZONE :Eastern European Time Value of milliseconds since Epoch is 1408095025866 Value of s in readable format is Fri Aug 15 12:30:25 EEST 2014 

价值IST从哪里来?

我已经检查了os文件,如/ etc / localtime

 bash-3.2# cd /etc bash-3.2# ls -lrt localtime lrwxrwxrwx 1 root root 33 Nov 16 2010 localtime -> /usr/share/zoneinfo/Europe/Dublin 

的/ etc / SYSCONFIG /时钟

 bash-3.2# cd /etc/sysconfig/ bash-3.2# cat clock # The ZONE parameter is only evaluated by system-config-date. # The timezone of the system is defined by the contents of /etc/localtime. ZONE="Europe/Dublin" UTC=true ARC=false bash-3.2# pwd 

爱尔兰标准时间 ,这是都柏林的正确时区,缩写为IST。

不幸的是,时区缩写不是唯一的,正如你在这个表格中可以看到的那样 – IST可以被分解成(至少)另外两个时区。 时区缩写不是相关ISO标准的一部分,通常不建议使用。

通常,在涉及多个时区时, UTC时间戳应该是首选。 有了UTC,每个参与方只需要跟踪自己最多的一个时区。 此外,UTC不受DST做法的影响,即使是经度相同的地点,通常也会造成混淆。