2010-01-05 1 views
2

En utilisant Groovy (ou Java) comment puis-je convertir un org.joda.time.LocalDateTime en un java.util.Date?En utilisant Groovy (ou Java) comment puis-je convertir un org.joda.time.LocalDateTime en un java.util.date?

import org.joda.time.* 

Calendar cal = Calendar.instance 
    cal.set(Calendar.DATE, 1) 
    cal.set(Calendar.HOUR, 0) 
    cal.set(Calendar.MINUTE, 0) 
    cal.set(Calendar.SECOND, 0) 
    cal.set(Calendar.MILLISECOND, 0) 

Date startOfTheMonth = cal.time 

LocalDateTime localDateTime = new LocalDateTime() 
    localDateTime = localDateTime.withDayOfMonth(1) 
    localDateTime = localDateTime.withTime(0,0,0,0) 
    localDateTime.minusMonths(6) 

Date dateFromLocalDate = localDateTime.toDateTime().toDate() 

println startOfTheMonth 
println dateFromLocalDate 

assert startOfTheMonth.equals(dateFromLocalDate) 

utilisant localDateTime.toDateTime().toDate() me donne un java.util.Date qui est de 6 heures de repos, je suis en heure normale du Centre (GMT + 6)

Comment puis-je convertir ma date LocalDateTime retour à un java.util.Date de telle sorte que les matchs de temps ?

+0

Juste pour qualifier cet exemple, je suis en utilisant la version Groovy: 1.6.7 JVM: 1.6.0_16 sur Linux avec Joda temps 1.6 –

Répondre

1

EDIT:

Le problème est l'utilisation de Calendar.HOUR qui indique l'heure du matin ou après-midi.

soit utiliser:

cal.set(Calendar.HOUR_OF_DAY, 0) 

ou:

cal.set(Calendar.AM_PM, Calendar.AM) 
cal.set(Calendar.HOUR, 0) 
+0

Je n'étais pas clair avec mon exemple, j'ai mis à jour ce que je voulais dire et utilisé equals() par souci de clarté. (Groovy gère l'égalité des dates en utilisant '==' [qui utilise equals()] et 'is' pour l'identité) –

+0

?? Je pense que Chandra a raison, comme votre exemple existe maintenant le "startOfTheMonth" = "Fri Jan 01 12:00:00 CST 2010" et dateFromLocalDate est "Fri Jan 01 00:00:00 CST 2010", ils sont partis par 12 heures, pas 6 heures que vous obtiendriez pour CST compensée de GMT. Si vous passez à HOUR_OF_DAY au lieu de HOUR, l'assertion fonctionne. –

+0

J'obtiens des résultats différents: startOfTheMonth = "Jan 01 12:00:00 CST 2010" et dateFromLocalDate = "dateFromLocalDate" L'assertion d'exemple fonctionne-t-elle pour vous? –

4

Quelque part lors de la conversion, la zone de mauvais temps est utilisé. Déboguez ceci en voyant ce que le fuseau horaire par défaut est TimeZone.getDefault() et ce que le Joda-Time par défaut est DateTimeZone.getDefault().

Vous pouvez être plus explicite lorsque vous faites la conversion trop:

localDateTime.toDateTime(yourDesiredZone).toDate()

Questions connexes