java - 时区和 SimpleDateFormat 奇怪的行为

标签 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);

日期是: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/

相关文章:

java - IntelliJ IDEA : defined environment variable not recognized in maven pom

java - P6Spy 不使用 HSQLDB 记录 hibernate 更新

java - 在 Java 中处理排序组

Java套接字,发送和接收数据?

c# - 在 C# 中计算过去的日期时间

sql - 在 T-SQL 中将特定 BigInt 转换为 DateTime

date - 日期格式 dd-MMM-yyyy 是否有标准名称?例如 2013 年 10 月 1 日

angular - 将数据导出到 excel 时,日期会根据时区发生变化。如何避免?

python - flask : convert utc time to user's local time

Android:有没有办法获取国家名称的时区?