Почему класс Date в Java отображается через год после вычитания из него 1900? - PullRequest
1 голос
/ 01 ноября 2011

Поскольку класс Date в Java устарел, я использовал его гораздо реже, но при его использовании чувствовал, что иногда он может кого-то раздражать, поскольку он отображает текущий год после вычитания из него 1900 года.Что дизайнеры действительно должны были почувствовать и навязать такой механизм, пока класс Calendar и его подкласс GregorianCalendar возвращают точный год, который поддерживается системой, следующим образом?

public class Main
{
    public static void main(String[] args)
    {
        Date d=new Date();
        System.out.println("Day : "+d.getDate()+" Month : "+d.getMonth()
        +" Year :  "+d.getYear());

        Calendar c=Calendar.getInstance();
        System.out.println("Day : "+c.get(Calendar.DATE)+" Month :  
       "+c.get(Calendar.MONTH)+" Year : "+c.get(Calendar.YEAR));
    }
}

Отображает вывод, подобный показанному ниже, текущий день, месяц и год.

День: 1 Месяц: 10 Год: 111

День:1 месяц: 10 год: 2011


Что дизайнеры могут иметь при отображении 111 вместо 2011 ?

1 Ответ

2 голосов
/ 01 ноября 2011

Вычитание только для поля года сортировки 'y'. Если указать поле длинного года, 'Y', вычитание не произойдет.

Если вы имеете в виду, почему в toString по умолчанию используется формат короткого года, я предполагаю, что это было наиболее естественное выражение, которое разработчики Java придумали для средней ситуации. Если вам нужно отобразить объект Date с другой форматированной датой, рассмотрите возможность использования класса SimpleDateFormatter: http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
formatter.format(new Date());
...