Java SimpleDateFormat 更改为不同的时区

Java SimpleDateFormat change to different TimeZone

我们在我的应用程序的功能中使用SimpleDateFormat userDateFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00")没有设置时区

并且每次创建 userDateFormat 时,我都使用

System.out.println("userDateFormat timezone: " + ((SimpleDateFormat)userDateFormat).getTimeZone().toString()); 

获取 userDateFormat 的时区信息。

在应用中运行 函数的不同调用(服务器没有关闭),我们得到不同的时区信息:

userDateFormat timezone: sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

userDateFormat timezone: sun.util.calendar.ZoneInfo[id="Europe/Copenhagen",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=133,lastRule=java.util.SimpleTimeZone[id=Europe/Copenhagen,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]

我想知道为什么在这个单一服务器中更改了这里的时区。

我们还有另一个 SimpleDateFormat 对象,将 setTimeZone 设置为 'GMT'(在所有项目中只设置一次),但从结果来看,它似乎使用了时区 'CET(UTC+1)'。是否有任何服务器设置会导致 jdk 时区混乱?

谢谢。

正如 bsiamionau 所说,我们有调用 TimeZone.setDefault 的代码,它会更改默认时区。