我从下面的代码中得到一个错误的时区值(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做法的影响,即使是经度相同的地点,通常也会造成混淆。