2009-08-11 8 views
20

Attualmente ho due componenti UI utilizzati per specificare una data e un'ora. Entrambi i componenti restituiscono le istanze java.util.Date che rappresentano rispettivamente la data e l'ora del calendario. La mia domanda è:Combinazione di java.util.Dates per creare una data

Qual è il modo migliore per combinare questi valori per creare un'istanza java.util.Date che rappresenta la data e l'ora? Vorrei evitare le dipendenze su Joda o altre librerie di terze parti.

mia soluzione attuale assomiglia a questo (ma c'è un modo migliore?):

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

Questo è buono come si otterrà senza utilizzare un'API corretta. – skaffman

+3

Penso che questo sia * perché * esistono librerie di data/ora di terze parti :-( –

+0

Hmmm ... Grazie - Questo è quello che sospettavo. – Adamski

risposta

15
public Date dateTime(Date date, Date time) { 
    return new Date(
        date.getYear(), date.getMonth(), date.getDay(), 
        time.getHours(), time.getMinutes(), time.getSeconds() 
        ); 
} 

è possibile convertire questo codice deprecato in Calendar per ottenere la soluzione.

Quindi la mia risposta è: no, non si può fare meglio senza utilizzare Joda

NB

jodatime presto sarà standardizzato con JSR 310

+3

anche se sono d'accordo che questo non dovrebbe essere usato, ma anche se qualcuno lo facesse, forse dovresti sistemarlo per loro. 'date.getDay() 'restituisce il giorno della settimana.Qui è necessario' day.getDate() ' – medopal

+0

Sono d'accordo con @medopal, questa soluzione non deve essere utilizzata sulla soluzione degli OP. – Clarkey

+0

Si prega di contrassegnare in grassetto ** questo è deprec codice ated: non usarlo ** –

4

penso che tu sia l'approccio è il migliore è molto probabile che per ottenere senza l'utilizzo di tempo Joda. Una soluzione che utilizza SimpleDateFormats potrebbe utilizzare meno righe, ma in realtà non offre alcun vantaggio.

+2

chiaro a me cosa in questa risposta è degno di un downvote. Qualcuno dovrebbe preoccuparsi di spiegare? –

+0

-1: la domanda afferma chiaramente che la dipendenza del tempo di Joda non è desiderata, quindi non è una risposta alla domanda. trova che vale la pena menzionare, appartiene a un commento IMHO - non una risposta a pieno titolo – Atmocreations

2

Utilizzo 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(); 
} 
Problemi correlati