Преобразование Java8 java.util.Date в java.time.ZonedDateTime

Я получаю следующее исключение, пытаясь преобразовать java.util.Date в java.time.LocalDate.

java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2014-08-19T05:28:16.768Z of type java.time.Instant

Код выглядит следующим образом:

public static Date getNearestQuarterStartDate(Date calculateFromDate){

    int[] quaterStartMonths={1,4,7,10};     
    Date startDate=null;

    ZonedDateTime d=ZonedDateTime.from(calculateFromDate.toInstant());
    int frmDateMonth=d.getMonth().getValue();

Что-то не так в том, как я использую класс ZonedDateTime?

В соответствии с документацией это должно преобразовать объект java.util.Date в ZonedDateTime. Формат даты выше - стандартная дата?

Нужно ли мне возвращаться на время в Йоду?

Если кто-то может предложить какое-то предложение, было бы здорово.

Ответ 1

Чтобы преобразовать Instant в ZonedDateTime, ZonedDateTime предлагает метод ZonedDateTime.ofInstant(Instant, ZoneId). Итак,

Итак, если вы хотите использовать ZonedDateTime в часовом поясе по умолчанию, ваш код должен быть

ZonedDateTime d = ZonedDateTime.ofInstant(calculateFromDate.toInstant(),
                                          ZoneId.systemDefault());

Ответ 2

Чтобы получить ZonedDateTime из Даты, вы можете использовать:

calculateFromDate.toInstant().atZone(ZoneId.systemDefault())

Затем вы можете вызвать метод toLocalDate, если вам нужен LocalDate. Смотрите также: Преобразовать java.util.Date в java.time.LocalDate