我在Java中解析时间戳时遇到了问题。
我希望两个时间戳都在同一个时区(CET)。
SimpleDateFormat sdaf = new SimpleDateFormat ("dd.MM.yyyy HH:mm:ss");
String str = "30.03.2013 06:00:00";
sdaf.setTimeZone (TimeZone.getTimeZone ("CET"));
java.util.Date dat = sdaf.parse (str);
System.out.println (str + " = " + dat);
str = "31.03.2013 05:00:00";
sdaf.setTimeZone (TimeZone.getTimeZone ("CET"));
dat = sdaf.parse (str);
System.out.println (str + " = " + dat);
但事实并非如此-请查看输出。
30.03.2013 06:00:00 = Sat Mar 30 06:00:00 CET 2013
31.03.2013 05:00:00 = Sun Mar 31 05:00:00 CEST 2013
编辑:
如果我把CET改成GMT+1,就会得到这个结果。
03.2013 06:00:00 = Sat Mar 30 06:00:00 CET 2013
31.03.2013 05:00:00 = Sun Mar 31 06:00:00 CEST 2013
看起来是正确的。但为什么CET没有起作用呢?
UTC+1产生了:
30.03.2013 06:00:00 = Sat Mar 30 07:00:00 CET 2013
31.03.2013 05:00:00 = Sun Mar 31 07:00:00 CEST 2013
GMT+1与其他时区有何不同?
SimpleDateFormat
类。它不仅过时,而且出了名的麻烦。今天我们有更好的选择java.time
,现代Java日期和时间API和它的DateTimeFormatter
。我还建议您避免依赖三个和四个字母的时区缩写。它们没有标准化,因此存在歧义,其中许多,包括CET,都不是真正的时区,如AxelH的答案中已经解释过。 - Ole V.V.