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が Date の場合Calendar.getInstance(Locale)は が使用され、デフォルトのタイムゾーンでカレンダーが作成されます。引数が の場合はCalendar、カレンダーのタイムゾーンが使用されます。さらに、これについての明示的な説明は見つかりませんでした。そのメソッドは非公開であるため、この動作が変わらないと想定することは不可能です。

于 2012-10-16T12:41:40.083 に答える