0

为什么如果我使用String.format(Date)它会在默认时区打印日期,但是当我使用String.format(Calendar)它时会在日历的时区打印。实际上,后者是我需要的,但我可以确定这种行为会持续存在吗?

4

1 回答 1

1

正如我从 String.format 的实现中发现的那样(至少对于 JDK 1.5,它printDateTime(Object, Locale)包含这样的代码:

    } else if (arg instanceof Date) {
    // Note that the following method uses an instance of the
    // default time zone (TimeZone.getDefaultRef().
    cal = Calendar.getInstance(l);
    cal.setTime((Date)arg);
    } else if (arg instanceof Calendar) {
    cal = (Calendar) ((Calendar)arg).clone();
    cal.setLenient(true);
    } else {

所以如果参数String.format是日期,Calendar.getInstance(Locale)则使用默认时区创建日历,如果参数是Calendar则使用日历的时区。此外,我没有找到任何明确的描述,并且该方法是私有的,所以不可能假设这种行为不会改变。

于 2012-10-16T12:41:40.083 回答