Utilizzando Groovy (o Java) come posso convertire un org.joda.time.LocalDateTime ad un java.util.date?
Domanda
Utilizzando Groovy (o Java) come posso convertire un org.joda.time.LocalDateTime
ad 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)
utilizzando localDateTime.toDateTime().toDate()
mi dà un java.util.Date
che è di 6 ore al largo Sono in centrale l'ora solare (GMT +6)
Come faccio a convertire la mia data LocalDateTime
di nuovo ad un java.util.Date
tale che il tempo corrisponde?
Soluzione
EDIT:
Il problema è l'uso di .HOUR che indica l'ora della mattina o pomeriggio.
In ogni uso:
cal.set(Calendar.HOUR_OF_DAY, 0)
o
cal.set(Calendar.AM_PM, Calendar.AM)
cal.set(Calendar.HOUR, 0)
Altri suggerimenti
Da qualche parte durante la conversione, viene utilizzato il fuso orario sbagliato. Il debug di questo vedendo ciò che il fuso orario predefinito è TimeZone.getDefault()
e ciò che il default Joda-tempo è DateTimeZone.getDefault()
.
Si può essere più esplicito quando si fa la conversione troppo:
localDateTime.toDateTime(yourDesiredZone).toDate()