Timezone和SimpleDateFormat奇怪的行为

时间:2014-11-13 17:02:39

标签: java datetime timezone simpledateformat

如果我执行此代码:

String data = "08/02/1941";
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse(data);

我输出日期:Sat Feb 08 01:00:00 CEST 1941

相反,如果我执行此代码:

String data = "08/02/1971";
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse(data);

日期为:Sat Feb 08 01:00:00 CET 1971

为什么我会有这种差异(CET和CEST)?

我的时区是欧洲/柏林(UTC + 1),我使用Java 1.7.0_67-b01

1 个答案:

答案 0 :(得分:2)

战争时间 - 转移时区

柏林的夏令时为observed all year long in 1941。被一些人称为希特勒时代"根据这个history of DST in Europe.

战争期间和战后的欧洲时区shifted around dramatically。例如,this post(据称来自格林威治皇家天文台)描述了其中一些变化,包括" Double" DST。这些转变是时区在历史中发挥重要作用的有趣案例。 At least one academic使用术语" chronopolitics"对于这种现象。

日期仅

如果您想要表示没有时间且没有时区的日期,请使用LocalDate classe。

LocalDate ld = LocalDate.of( 1941 , Month.FEBRUARY , 8 ) ;
  

ld.toString():1941-02-08

上面讨论的时区问题逐渐消失。