2009-08-11 9 views
20

Tengo actual tengo dos componentes de UI utilizados para especificar una fecha y una hora. Ambos componentes devuelven java.util.Date instancias que representan la fecha y la hora del calendario, respectivamente. Mi pregunta es:Combinando java.util.Dates para crear una fecha-hora

¿Cuál es la mejor manera de combinar estos valores para crear una instancia java.util.Date que represente la fecha y la hora? Me gustaría evitar dependencias de Joda u otras bibliotecas de terceros.

Mi solución actual se parece a esto (pero hay una manera mejor?):

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(); 
+0

Eso es lo mejor que obtendrá sin usar una API adecuada. – skaffman

+3

Creo que esto es * por qué * existen bibliotecas de fecha/hora de terceros :-( –

+0

Hmmm ... Gracias - Eso es lo que sospechaba. – Adamski

Respuesta

15
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 Calendar para obtener su solución.

Entonces mi respuesta es: no, no se puede hacer mejor sin usar joda

NB

JodaTime pronto se normalizará con JSR 310

+3

aunque estoy de acuerdo en que esto no debe ser utilizado, pero incluso si alguien lo hizo, tal vez debería arreglarlo para ellos. 'date.getDay() 'devuelve el día en la semana. Aquí necesitará' day.getDate() ' – medopal

+0

Estoy de acuerdo con @medopal, esta solución no debe usarse sobre la solución OPs. – Clarkey

+0

Marque en negrita ** esto es deprec Código ated: no lo use ** –

4

Creo que eres el mejor enfoque es que es probable conseguir sin necesidad de utilizar el tiempo Joda. Una solución que use SimpleDateFormats podría usar menos líneas, pero realmente no le proporciona ningún beneficio.

+2

No claro para mí, ¿en qué esta respuesta es digno de un voto negativo? ¿Le importaría a alguien explicar? –

+0

-1: La pregunta claramente indica que la dependencia del tiempo Joda no es deseada. Por lo tanto, no es una respuesta a la pregunta. Si el autor encuentra que vale la pena mencionar, pertenece a un comentario en mi humilde opinión - no es una respuesta completa. – Atmocreations

2

Uso del 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(); 
}