小编Mar*_*ška的帖子

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());
Run Code Online (Sandbox Code Playgroud)

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

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

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

链接: WSO2平台

java

10
推荐指数
1
解决办法
158
查看次数

标签 统计

java ×1