Объединение java.util.Dates для создания даты и времени - PullRequest
21 голосов
/ 11 августа 2009

В настоящее время у меня есть два компонента пользовательского интерфейса, используемые для указания даты и времени. Оба компонента возвращают java.util.Date экземпляров, представляющих календарную дату и время соответственно. Мой вопрос:

Как лучше всего объединить эти значения для создания java.util.Date экземпляра, представляющего дату и время? Я бы хотел избежать зависимости от Joda или других сторонних библиотек.

Мое текущее решение выглядит так (но есть ли лучший способ?):

Date date = ... // Calendar date
Date time = ... // Time

Calendar calendarA = Calendar.getInstance();
calendarA.setTime(date);

Calendar calendarB = Calendar.getInstance();
calendarB.setTime(time);

calendarA.set(Calendar.HOUR_OF_DAY, calendarB.get(Calendar.HOUR_OF_DAY));
calendarA.set(Calendar.MINUTE, calendarB.get(Calendar.MINUTE));
calendarA.set(Calendar.SECOND, calendarB.get(Calendar.SECOND));
calendarA.set(Calendar.MILLISECOND, calendarB.get(Calendar.MILLISECOND));

Date result = calendarA.getTime();

Ответы [ 3 ]

15 голосов
/ 11 августа 2009
public Date dateTime(Date date, Date time) {
    return new Date(
                     date.getYear(), date.getMonth(), date.getDay(), 
                     time.getHours(), time.getMinutes(), time.getSeconds()
                   );
}

Вы можете преобразовать этот устаревший код в Календарь, чтобы получить ваше решение.

Тогда мой ответ: нет, вы не можете добиться большего успеха без использования йода

NB

Йодатим скоро будет стандартизирован с JSR 310

4 голосов
/ 11 августа 2009

Я думаю, что ваш подход - лучшее, что вы можете получить без использования времени Joda. Решение, использующее SimpleDateFormats, может использовать меньше строк, но на самом деле не дает никакой выгоды.

2 голосов
/ 02 ноября 2016

Использование календаря

public Date dateTime(Date date, Date time) {

    Calendar aDate = Calendar.getInstance();
    aDate.setTime(date);

    Calendar aTime = Calendar.getInstance();
    aTime.setTime(time);

    Calendar aDateTime = Calendar.getInstance();
    aDateTime.set(Calendar.DAY_OF_MONTH, aDate.get(Calendar.DAY_OF_MONTH));
    aDateTime.set(Calendar.MONTH, aDate.get(Calendar.MONTH));
    aDateTime.set(Calendar.YEAR, aDate.get(Calendar.YEAR));
    aDateTime.set(Calendar.HOUR, aTime.get(Calendar.HOUR));
    aDateTime.set(Calendar.MINUTE, aTime.get(Calendar.MINUTE));
    aDateTime.set(Calendar.SECOND, aTime.get(Calendar.SECOND));

    return aDateTime.getTime();
}   
...