我看到一个对我来说很新的问题,尽管我已经使用SimpleDateFormat进行了10年的日期解析/格式化。我在中央时区本地运行(没有外部数据中心)。我的问题是我的SimpleDateFormat(依赖于TimeZone.getDefault())在不同的代码块中有不同的默认时区:
String myDatePattern = "yyyy-MM-dd HH:mm:ss.SSS";
static {
System.out.println("default A: " + TimeZone.getDefault());
}
SimpleDateFormat sdfA = new SimpleDateFormat(myDatePattern);
public void run(String... strings) {
System.out.println("default B: " + TimeZone.getDefault());
SimpleDateFormat sdfB = new SimpleDateFormat(myDatePattern);
System.out.println("sdfA timezone: " + sdfA.getTimeZone());
System.out.println("sdfB timezone: " + sdfB.getTimeZone());
}
给出了这个输出:
default A: sun.util.calendar.ZoneInfo[id="America/Chicago"...
default B: sun.util.calendar.ZoneInfo[id="GMT"...
sdfA timezone: sun.util.calendar.ZoneInfo[id="America/Chicago"...
sdfB timezone: sun.util.calendar.ZoneInfo[id="GMT"...
因此,与在方法中定义的同一对象相比,在类级别定义的SimpleDateFormat对象获得不同的时区默认值!