Utilizzando Groovy (o Java) come posso convertire un org.joda.time.LocalDateTime ad un java.util.date?

StackOverflow https://stackoverflow.com/questions/2009795

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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top