Подтвердить что ты не робот

Установить дату в одной строке

В соответствии с API Java конструктор Date(year, month, day) обесценивается. Я знаю, что я могу заменить его следующим кодом:

Calendar myCal = Calendar.getInstance();
myCal.set(Calendar.YEAR, theYear);
myCal.set(Calendar.MONTH, theMonth);
myCal.set(Calendar.DAY_OF_MONTH, theDay);
Date theDate = myCal.getTime();

Тем не менее, я бы хотел, чтобы что-то было короче, чтобы заменить его (в идеале от одной до двух строк).

4b9b3361

Ответ 1

Вы можете использовать new GregorianCalendar(theYear, theMonth, theDay) .getTime():

public GregorianCalendar(int year, int month, int dayOfMonth)

Создает GregorianCalendar с заданной датой, установленной в часовом поясе по умолчанию с локалью по умолчанию.

Ответ 2

Вы можете использовать

new SimpleDateFormat( "yyyyMMdd" ).parse( "20100520" )

Ответ 3

Это еще одна причина использовать Joda Time

new DateMidnight(2010, 3, 5)

DateMidnight теперь устарела, но тот же эффект может быть достигнут с помощью Joda Time DateTime

DateTime dt = new DateTime(2010, 3, 5, 0, 0);

Ответ 4

В календаре есть метод set(), который может установить год, месяц и день месяца за один вызов:

myCal.set( theYear, theMonth, theDay );

Ответ 5

Почему бы вам просто не написать простой метод утилиты:

public final class DateUtils {
    private DateUtils() {
    }

    public static Calendar calendarFor(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month);
        cal.set(Calendar.DAY_OF_MONTH, day);
        return cal;
    }

    // ... maybe other utility methods
}

И затем назовите это везде в остальной части вашего кода:

Calendar cal = DateUtils.calendarFor(2010, Calendar.MAY, 21);

Ответ 6

ТЛ; др

LocalDate.of( 2015 , Month.JUNE , 7 )  // Using handy 'Month' enum. 

…или же…

LocalDate.of( 2015 , 6 , 7 )  // Sensible numbering, 1-12 for January to December. 

java.time

Среда java.time, встроенная в Java 8 и более поздние версии, заменяет проблемные старые классы, java.util.Date/.Calendar.

Классы java.time используют неизменяемые объекты. Таким образом, они по своей природе потокобезопасны. У вас не будет проблем с безопасностью потоков, упомянутых в других ответах.

LocalDate

Эта структура включала класс для объектов только для даты без какого-либо времени суток или часового пояса, LocalDate. Обратите внимание, что часовой пояс (ZoneId) необходим для определения даты.

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );

Вы можете создать экземпляр для конкретной даты. Обратите внимание, что число месяцев - разумный диапазон 1-12 в отличие от старых классов.

LocalDate localDate = LocalDate.of( 2015 , 6 , 7 );

Или используйте перечисление, Month.

LocalDate localDate = LocalDate.of( 2015 , Month.JUNE , 7 );

Перерабатывать

Лучше всего избегать старых классов даты и времени. Но если вам нужно, вы можете обратить. Вызовите новые методы, добавленные к старым классам, чтобы облегчить преобразования.

В этом случае нам нужно указать время суток, чтобы согласовать его со значением только для даты, которое будет объединено для объекта java.util.Date. Первый момент дня, вероятно, имеет смысл. Пусть java.time определяет время этого первого момента, поскольку оно не всегда 00:00:00.0.

Нам также нужно указать часовой пояс, так как дата зависит от часового пояса.

ZoneId zoneId = zoneId.of( "America/Montreal" );
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );

Instant - это базовый класс в java.time, представляющий момент времени на UTC. Поток Instant статический метод на дату для преобразования.

Instant instant = zdt.toInstant();
java.util.Date utilDate = java.util.Date.from( instant );

О java.time

Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытеснять неприятные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, и SimpleDateFormat.

Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.

Чтобы узнать больше, смотрите Oracle Tutorial. И поиск для многих примеров и объяснений. Спецификация JSR 310.

Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*.

Где взять классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и другие.

Ответ 8

Используйте конструктор Date(year,month,date) в Java 8, он устарел:

Date date = new Date(1990, 10, 26, 0, 0);

Лучший способ - использовать SimpleDateFormat

DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date date = format.parse("26/10/1985");

вам нужно импортировать import java.text.SimpleDateFormat;