我在 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 ×1