如果我执行这段代码:
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);
日期是:1971 年欧洲中部时间 2 月 8 日星期六 01:00:00
。
为什么会有这种差异(CET 和 CEST)?
我的时区是欧洲/柏林 (UTC+1),我使用的是 Java 1.7.0_67-b01
最佳答案
war 时期 - 改变时区
夏令时为 observed all year long in 1941在柏林。根据此history of DST in Europe.被一些人称为“希特勒时间”
欧洲时区 shifted around dramatically war 期间和 war 结束后。例如,this post (据称来自格林威治皇家天文台)描述了其中一些变化,包括“双”DST。这些转变是时区在历史上发挥重要作用的有趣案例。 At least one academic使用“时间政治”一词来形容这种现象。
仅限日期
如果您想要表示没有时间和时区的日期,请使用 LocalDate
类。
LocalDate ld = LocalDate.of( 1941 , Month.FEBRUARY , 8 ) ;
ld.toString(): 1941-02-08
上面讨论的时区问题消失了。
关于java - 时区和 SimpleDateFormat 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26914327/