在静态块中运行时,TimeZone.getDefault()返回不同的值

时间:2015-10-15 18:48:41

标签: java date simpledateformat

我看到一个对我来说很新的问题,尽管我已经使用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对象获得不同的时区默认值!

0 个答案:

没有答案