java.util.Calendar-1947年

我在 WSO2 平台中发现了一个有趣的行为,使用 Calendar 将字符串转换为日期。WSO2 使用 java.util.Calendar 作为最终结果。我发现如果在下面的代码片段中使用了 01.01.1947 - 23.02.1947 的日期,结果总是在一天前给我们。我发现它是我们的时区这样做,因为它向前一小时。意思是日历将结果倒退一小时,我们得到晚上 11 点前的一天。

我们已经通过不转换为 Date 来解决问题。所以这不是问题。

问题是,为什么这只发生在 01.01.1947 - 23.02.1947 的日期?

这是一个可以模拟问题的示例代码片段:

    int year = 1947;
    int month = 2;
    int day = 23;
    int timezoneOffset = TimeZone.getDefault().getRawOffset();
    Calendar calendar = Calendar.getInstance();
    calendar.clear();
    calendar.set(1, year);
    calendar.set(2, month - 1);
    calendar.set(5, day);
    calendar.set(15, timezoneOffset);

    System.out.println(calendar.getTime());

在我的时区,timezoneOffset 的结果是 3600000,以防您想测试我的时区(捷克共和国)。

请注意,这是用 WSO2 编写的代码,如果对此有疑问,我无法更改它。

我为此使用的 Java 版本是:openjdk 11.0.8 2020-07-14

链接: WSO2平台

回答

1947 年 2 月 23 日,捷克共和国(当时的捷克斯洛伐克)从格林威治标准时间时区变为欧洲中部时间,因此时钟提前了 1 小时。相反的情况发生在 1946 年 12 月 1 日(欧洲中部时间->格林威治标准时间,-1 小时)。

发生这种情况是因为当时当地政府实施了冬令时,出于与我们通常有夏令时相同的原因,即(据说)节省能源消耗。

链接:timeanddate.com 上布拉格多年来的时间变化


以上是java.util.Calendar-1947年的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>