我的 Mageia 4 中有欧洲/莫斯科时区。
代码是这样的
System.out.println(new java.util.Date());
System.out.println(System.getProperty("user.timezone"));
Run Code Online (Sandbox Code Playgroud)
回报
Fri Oct 24 13:43:22 GMT+03:00 2014
GMT+03:00
Run Code Online (Sandbox Code Playgroud)
如果我将系统日期设置为2014年10月24日
该代码返回
Sun Oct 26 14:44:26 GMT+03:00 2014
GMT+03:00
Run Code Online (Sandbox Code Playgroud)
如果我将系统日期设置为2014年10月26日
在我看来,这是 java zoneinfo 系统的错误行为。我下载了 tzupdater 并运行它,文件 Europe/Moscow 已更新,现在其大小为 705 kB。
我尝试下面的代码:
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Moscow"));
System.out.println(new java.util.Date());
System.out.println(java.util.TimeZone.getDefault());
Run Code Online (Sandbox Code Playgroud)
它返回
Fri Oct 24 15:10:34 MSK 2014
sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null]
Run Code Online (Sandbox Code Playgroud)
和
Sun Oct 26 15:32:03 MSK 2014
sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null]
Run Code Online (Sandbox Code Playgroud)
为什么这样?为什么这两种情况下的偏移量相同?