ingresar - private date fecha java
Combinar java.util.Dates para crear una fecha y hora (3)
Actualmente tengo dos componentes de UI utilizados para especificar una fecha y una hora. Ambos componentes devuelven instancias java.util.Date
representan la fecha y la hora del calendario respectivamente. Mi pregunta es:
¿Cuál es la mejor manera de combinar estos valores para crear una instancia java.util.Date
represente la fecha y la hora? Me gustaría evitar las dependencias en Joda u otras bibliotecas de terceros.
Mi solución actual se ve así (pero ¿hay una mejor manera?):
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();
Usando el calendario
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();
}
Creo que tu enfoque es lo mejor que puedes obtener sin usar el tiempo de Joda. Una solución que utiliza SimpleDateFormats puede usar menos líneas, pero en realidad no le brinda ningún beneficio.
public Date dateTime(Date date, Date time) {
return new Date(
date.getYear(), date.getMonth(), date.getDay(),
time.getHours(), time.getMinutes(), time.getSeconds()
);
}
Puede convertir este código en desuso en Calendario para obtener su solución.
Entonces mi respuesta es: no, no puedes hacerlo mejor sin usar joda.
nótese bien
Jodatime pronto será estandarizado con JSR 310