2009-08-11 5 views
20

J'ai actuellement deux composants d'interface utilisateur utilisés pour spécifier une date et une heure. Les deux composants renvoient java.util.Date instances représentant respectivement la date et l'heure du calendrier. Ma question est:Combinaison de java.util.Dates pour créer une date-heure

Quelle est la meilleure façon de combiner ces valeurs pour créer une instance java.util.Date représentant la date et l'heure? Je voudrais éviter les dépendances sur Joda ou d'autres bibliothèques tierces.

Ma solution actuelle ressemble à ceci (mais est-il une meilleure façon?):

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

C'est aussi bon que vous obtiendrez sans utiliser une API appropriée. – skaffman

+3

Je pense que c'est * pourquoi * bibliothèques de date/heure tiers existent :-( –

+0

Hmmm ... Merci - C'est ce que je soupçonnais – Adamski

Répondre

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

Vous pouvez convertir ce code obsolète en Calendrier pour obtenir votre solution.

Alors ma réponse est: non, vous ne pouvez pas faire mieux sans utiliser joda

NB

jodatime sera bientôt standardisé avec JSR 310

+3

bien que je suis d'accord que cela ne devrait pas être utilisé, mais même si quelqu'un l'a fait, peut-être vous devriez le corriger pour eux. 'date.getDay() 'renvoie le jour dans la semaine Ici vous aurez besoin de' day.getDate() ' – medopal

+0

Je suis d'accord avec @medopal, cette solution ne doit pas être utilisée sur la solution OPs – Clarkey

+0

Veuillez marquer en gras ** ceci est deprec code ated: ne l'utilisez pas ** –

4

Je pense que vous êtes approche est la meilleure que vous êtes susceptible d'obtenir sans utiliser le temps Joda. Une solution utilisant SimpleDateFormats peut utiliser moins de lignes, mais ne vous apporte aucun avantage.

+2

Not clair pour moi ce que dans cette réponse est digne d'un downvote Quelqu'un pourrait-il expliquer? –

+0

-1: La question indique clairement que la dépendance de l'heure Joda n'est pas souhaitée.C'est donc pas une réponse à la question. Il vaut la peine de le mentionner, il appartient à un commentaire IMHO - pas une réponse à part entière – Atmocreations

2

En utilisant le calendrier

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