まず、がその引数System.out.println
のメソッドを暗黙的に呼び出すことに注意することが重要だと思います。toString
引数は、Object
またはそのサブクラスでなければなりません。AndDate
のサブクラスですObject
。そうは言っても、1.7のDate#toString
実装を見てください。
public String toString() {
// "EEE MMM dd HH:mm:ss zzz yyyy";
BaseCalendar.Date date = normalize();
StringBuilder sb = new StringBuilder(28);
int index = date.getDayOfWeek();
if (index == gcal.SUNDAY) {
index = 8;
}
convertToAbbr(sb, wtb[index]).append(' '); // EEE
convertToAbbr(sb, wtb[date.getMonth() - 1 + 2 + 7]).append(' '); // MMM
CalendarUtils.sprintf0d(sb, date.getDayOfMonth(), 2).append(' '); // dd
CalendarUtils.sprintf0d(sb, date.getHours(), 2).append(':'); // HH
CalendarUtils.sprintf0d(sb, date.getMinutes(), 2).append(':'); // mm
CalendarUtils.sprintf0d(sb, date.getSeconds(), 2).append(' '); // ss
TimeZone zi = date.getZone();
if (zi != null) {
sb.append(zi.getDisplayName(date.isDaylightTime(), zi.SHORT, Locale.US)); // zzz
} else {
sb.append("GMT");
}
sb.append(' ').append(date.getYear()); // yyyy
return sb.toString();
}
Date
オブジェクトの文字列表現はとして指定されEEE MMM dd HH:mm:ss zzz yyyy
ます。これはまさにあなたが見ているものです。
Date
オブジェクトを別の形式で表示する場合は、SimpleDateFormat
クラスを使用します。その唯一の目的は、Date
オブジェクトを文字列として表現する方法に柔軟性を追加することです。
また...
ばかげた回避策ではありますが、考えられる 1 つの方法は、独自のラッパー クラスを作成することです。
public class MyDate{
private final Date d;
private final SimpleDateFormat sdf;
public(Date d, SimpleDateFormat sdf){
this.d = d;
this.sdf = sdf;
}
// not recommended...should only be used for debugging purposes
@Override
public String toString(){
return sdf.format(d);
}
}