2015-02-28 2 views
7

Каков самый простой способ получить объект Calendar от java.time.Instant или java.time.ZonedDateTime?Преобразование java.time в Календарь

+0

Что вы пытаетесь? В чем проблема? Вы знаете, что javadoc свободно доступен. –

+2

Судя по вашей репутации, я подозреваю, что вы, вероятно, протестировали «Календарь cal = Calendar.getInstance(); cal.setTimeInMillis (Instant.now(). toEpochMilli()); 'поэтому что не так с этим решением? – Pshemo

+1

И, вероятно, вы также попробовали - 'GregorianCalendar.from (zonedDateTime);' –

ответ

8

Получение Calendar моментально от ZonedDateTime довольно прямолинейно, если вы знаете, что существует метод GregorianCalendar#from(ZonedDateTime). Обсуждалось в Threeten-dev mail group, о том, почему этот метод не находится в классе . Однако не очень глубокая дискуссия.

Однако нет прямого способа конвертировать из Instant в Calendar. Вы имеете иметь промежуточное состояние для этого:

Instant instant = Instant.now(); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); 
Calendar cal1 = GregorianCalendar.from(zdt); 

Это, вероятно, потому, что, как видно из таблицы, на this oracle tutorial, Н. Instant сопоставляется Date, а не в Calendar. Аналогично, ZonedDateTime соответствует Calendar.

0

Как насчет GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))?

+0

Невозможно получить ZonedDateTime от TemporalAccessor: 2001-12-17T09: 30: 47Z типа java.time.Instant – Line

+0

Действительно, вам также нужно указать ZoneId. Я обновил свой ответ. –

1

Необходимо мгновенно получить TimeZone, а затем вы можете получить календарь.

Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())); 
Смежные вопросы