2013-11-24 3 views
0

У меня есть следующие строки в моем коде:Wrong (Дата) Дата возвращения в Java

this.date = new Date(year, month, day); 

Но когда я даю, например:

year = 2008 
month = 1 
day = 20 

я получаю:

Thu Feb 20 00:00:00 BRT 3908 

Или, скажем так:

year = 2008 
month = 3 
day = 9 

я получаю:

Thu Apr 09 00:00:00 BRT 3908 

Любые идеи, что это не так?

+2

Ничего нехорошо. Он делает именно то, что должен. Ваши ожидания ошибочны. –

+0

Дата конструктора (int year, int month, int date) устарела, вместо этого вы должны использовать Calendar.set (год + 1900, месяц, дата). –

+0

Да, я знаю это, но учитель сказал, что я могу использовать только Дату ... Я не знаю, почему ... В любом случае проблема решена, я скоро отправлю ответ. – JChris

ответ

5

Вы должны прочитать JavaDoc о конструкторе. Параметры не просто то, что вы думаете.

Он говорит:

year - год минус 1900; должен быть от 0 до 8099. (Обратите внимание, что 8099 9999 минус 1900)
month - от 0 до 11
day - от 1 до 31

Однако, как говорят, как хорошо, это является устаревшим Документы. Постройте даты, используя вместо этого Calendar. Или используйте JodaTime.

+0

Спасибо. Я не могу поверить, что это было так просто. 'Это.date = new Дата (год - 1900, месяц - 1, день); ' – JChris

+0

И о календаре: Да, я знаю это, но учитель сказал, что я могу использовать только дату ... Не знаю, почему ... – JChris

0

Месяц основан на нулевом значении. Итак, 0 - Ян и 1 - февраль, и так далее.

0

попробовать это

Date date= new Date(); 
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); 
    System.out.println(format.format(date)); 
0

Как уже правильно сказали, вы предположить месяц номера были 1 на основе подсчета. Но на самом деле они подсчитываются на основе 0. Одна из многих проблем с классами java.util.Date/Calendar.

В качестве временного решения, использовать предопределенные константы, а не пытаться вспомнить, что нелепая схема нумерации:

Еще лучше получить реальную временную рамку: либо (a) Joda-Time или (b) аналогичные и новые JSR 310: Date and Time API в комплекте с Java 8 для замены java.util.Date/Calendar.

Смежные вопросы