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

Используя 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, чтобы время совпадало?


person Colin Harrington    schedule 05.01.2010    source источник
comment
Просто чтобы уточнить этот пример, я использую Groovy Version: 1.6.7 JVM: 1.6.0_16 в Linux с Joda-time 1.6.   -  person Colin Harrington    schedule 16.01.2010


Ответы (2)


РЕДАКТИРОВАТЬ:

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

Либо используйте:

cal.set(Calendar.HOUR_OF_DAY, 0)

or:

cal.set(Calendar.AM_PM, Calendar.AM)
cal.set(Calendar.HOUR, 0)
person Chandra Patni    schedule 06.01.2010
comment
Я не совсем понял свой пример, я обновил то, что имел в виду, а также использовал equals() для ясности. (Groovy обрабатывает равенство дат, используя '==' [который использует equals()] и 'is' для идентификации) - person Colin Harrington; 06.01.2010
comment
?? Я думаю, что Чандра права, так как ваш пример существует сейчас, startOfTheMonth = 01 января 12:00:00 CST 2010 и dateFromLocalDate 01 января 00:00:00 CST 2010, они отключены на 12 часов, а не на 6 часов, что вы получите смещение CST от GMT. Если вы переключитесь на HOUR_OF_DAY вместо HOUR, утверждение сработает. - person Ted Naleid; 06.01.2010
comment
Я получаю разные результаты: startOfTheMonth = 01 января 12:00:00 CST 2010 и dateFromLocalDate = dateFromLocalDate Утверждение примера работает для вас? - person Colin Harrington; 16.01.2010

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

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

localDateTime.toDateTime(yourDesiredZone).toDate()

person JodaStephen    schedule 06.01.2010