Используя Groovy (или Java), как я могу преобразовать org.joda.time.LocalDateTime в java.util.date? - PullRequest
2 голосов
/ 06 января 2010

Используя Groovy (или Java), как я могу преобразовать org.joda.time.LocalDateTime в 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)

с использованием localDateTime.toDateTime().toDate() дает мне java.util.Date, что на 6 часов больше, я нахожусь по центральному стандартному времени (GMT +6)

Как мне преобразовать мою LocalDateTime дату обратно в java.util.Date, чтобы время совпадало?

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Где-то во время преобразования используется неправильный часовой пояс. Отладьте это, посмотрев часовой пояс по умолчанию TimeZone.getDefault() и Joda-Time по умолчанию DateTimeZone.getDefault().

Вы можете быть более явным, когда делаете преобразование тоже:

localDateTime.toDateTime(yourDesiredZone).toDate()

1 голос
/ 06 января 2010

EDIT:

Проблема заключается в использовании Calendar.HOUR , который указывает часы утра или дня.

Либо использовать:

cal.set(Calendar.HOUR_OF_DAY, 0)

или

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