El uso de Groovy (o Java) ¿cómo puedo convertir un org.joda.time.LocalDateTime a un java.util.date?
Pregunta
El uso de Groovy (o Java) ¿cómo puedo convertir un org.joda.time.LocalDateTime
a 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)
usando localDateTime.toDateTime().toDate()
me da una java.util.Date
que es de 6 horas fuera Estoy en hora central estándar (GMT 6)
¿Cómo convierto mi fecha de LocalDateTime
de nuevo a un java.util.Date
tal que coincide con el tiempo?
Solución
EDIT:
El problema es el uso de .HOUR que indica la hora de la mañana o por la tarde.
De cualquier uso:
cal.set(Calendar.HOUR_OF_DAY, 0)
o
cal.set(Calendar.AM_PM, Calendar.AM)
cal.set(Calendar.HOUR, 0)
Otros consejos
En algún lugar durante la conversión, se utiliza la zona de momento equivocado. Depurar este al ver lo que la zona horaria predeterminada es TimeZone.getDefault()
y lo que el defecto Joda-Time es DateTimeZone.getDefault()
.
Puede ser más explícito cuando se hace la conversión también:
localDateTime.toDateTime(yourDesiredZone).toDate()