Объединение java.util.Dates для создания даты-времени
У меня есть ток, у которого два компонента пользовательского интерфейса, используемые для указания даты и времени. Оба компонента возвращают экземпляры 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();
Ответы
Ответ 1
public Date dateTime(Date date, Date time) {
return new Date(
date.getYear(), date.getMonth(), date.getDay(),
time.getHours(), time.getMinutes(), time.getSeconds()
);
}
вы можете вернуть этот устаревший код в Календарь, получая ваше решение.
Тогда мой ответ: нет, вы не можете сделать лучше, не используя joda
NB
jodatime скоро будет стандартизован JSR 310
Ответ 2
Я думаю, что вы подходите, это лучшее, что вы, вероятно, получите, не используя время Джоды. Решение с использованием SimpleDateFormats может использовать меньшее количество строк, но на самом деле не дает вам никакой пользы.
Ответ 3
Использование календаря
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));
return aDateTime.getTime();
}