2015-08-05 2 views
1

Когда я использовал следующий код, объект Date был неправильным.Как получить объект Date из года, месяца и дня?

Date date = new Date(day.getYear(), day.getMonth(), day.getDay()); 

Может ли кто-нибудь сказать мне, как получить объект Date Из значения года, месяца и дня?

+0

Что плохого в вашем методе? Каков был исходный объект 'day' и какой объект' date' вы получили? – Codebender

+0

Посмотрите на это рядом с дубликатом: [Создание объекта даты java из года, месяца, дня] (http://stackoverflow.com/q/16499228/642706) –

ответ

4

Не зная больше, я должен был бы догадаться, но, вероятно, вам не читал JavaDoc на этом осуждается конструктор:

год год минус 1900.
месяц месяц между 0-11.
дата день месяца между 1-31.

Как вы можете видеть, если вы хотите создать дату сегодня (Aug 5 2015), вы должны были бы использовать new Date (115, 7, 5);

Если вы видите, что документация вы можете догадаться, почему это не рекомендуется и не должны использоваться в каком-либо новом коде. :)

+0

когда я использовал новую дату (115,7,5) получить год 115 не 2015 –

+0

@JohnnyTsai в таком случае, пожалуйста, добавьте больше информации, например. точное имя класса (включая пакет), используемую версию Java, как вы проверяете год и т. д. Также обратите внимание на JavaDoc на 'getYear()': 'год, представленный этой датой, минус 1900.', то есть вы получите 115 назад. – Thomas

+2

@JohnnyTsai Поскольку 'Date.getYear()' возвращает год (* 115 *), а не правильно отрегулированный год. Например, попробуйте 'new Date (115,7,5) .toString()', а затем прекратите использование устаревших методов. Кстати, еще несколько исследований будут замечательными. – Tom

0

вы должны использовать GetDate() вместо getDay() метод, чтобы получить день, потому что getDay() возвращает день недели не день месяца

+0

Дневной класс бросает вызов самому себе. –

0
  • int getYear() устар. По состоянию JDK версии 1.1, заменен Calendar.get(Calendar.YEAR) - 1900.

  • int getMonth() Устаревшей. По состоянию JDK версии 1.1, заменен Calendar.get(Calendar.MONTH).

  • int getDay() Устаревшей. По состоянию на JDK версии 1.1, заменен Calendar.get(Calendar.DAY_OF_WEEK).

Поэтому использовать:

Date date = new Date(Calendar.get(Calendar.YEAR) - 1900, Calendar.get(Calendar.MONTH), Calendar.get(Calendar.DAY_OF_WEEK));

Рекомендации для: Используйте Joda-Time

+1

Если вы все равно настраиваете «Календарь», вам не нужно будет использовать этот конструктор вообще. Просто не забудьте установить временную часть в 0 (час, минуты, секунды, миллис) и вызвать 'getTime()' в календаре. – Thomas

+0

Что касается рекомендации: я согласен с вами в отношении Java 7 и предыдущих. Java 8 имеет новую дату api, которая похожа на Joda Time. – Thomas

+0

@Thomas, вы абсолютно правы, но поскольку требование OP - это объект 'Date', это решение. –

1

Вы можете сделать это с помощью обходного если вы застряли на Java < 8, но это очень угль у:

java.util.Date date = new java.text.SimpleDateFormat("dd.MM.yyyy").parse("05.08.2015"); 

, как @Thomas уже говорилось, конструктор по умолчанию дата/месяц/год осуждается. Вероятно, посмотрите на this link, если у вас есть доступ к Java8.

5

Для достижения этой цели вы можете использовать класс Calendar.

public static void main(String[] args) throws Exception { 
    Date date = new Date (115, 7, 5); 
    System.out.println("date  = " + date); 

    Calendar calendar = GregorianCalendar.getInstance(); 
    calendar.set(Calendar.DAY_OF_MONTH, 5); 
    calendar.set(Calendar.MONTH, 7); 
    calendar.set(Calendar.YEAR, 2015); 
    calendar.set(Calendar.MILLISECOND, 0); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    date = calendar.getTime(); 
    System.out.println("calendar = " + date); 

    // or create directly a new clanedar instance 
    // thanks Tom to mention this 
    calendar = new GregorianCalendar(2015, 7, 5); 
    date = calendar.getTime(); 
    System.out.println("calendar = " + date); 
} 

выход

date  = Wed Aug 05 00:00:00 CEST 2015 
calendar = Wed Aug 05 00:00:00 CEST 2015 
calendar = Wed Aug 05 00:00:00 CEST 2015 
+0

Если вы используете 'GregorianCalendar', то почему вы не используете' new GregorianCalendar (2015, 7, 5) 'вместо того, чтобы вручную устанавливать каждое поле? – Tom

+0

@Tom Хороший вопрос. Возможно, у меня было что-то еще в виду. (это рано утром ;-)) – SubOptimal

+0

Btw, 'date = new Date (calendar.getTimeInMillis());' можно сократить до 'date = calendar.getTime();' :) – Thomas

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