2015-02-28 19 views
7

Jaki jest najprostszy sposób uzyskania obiektu Calendar z java.time.Instant lub java.time.ZonedDateTime?Konwersja java.time do Kalendarza

+0

Co próbowaliście? Jaki jest problem? Jawadoc jest swobodnie dostępny, wiesz. –

+2

Sądząc po twojej reputacji podejrzewam, że prawdopodobnie przetestowałeś 'Calendar cal = Calendar.getInstance(); cal.setTimeInMillis (Instant.now(). toEpochMilli()); "więc co jest nie tak z tym rozwiązaniem? – Pshemo

+1

I pewnie też próbowałeś - 'GregorianCalendar.from (zonedDateTime);' –

Odpowiedz

8

Natychmiastowy od jest całkiem prosty, pod warunkiem, że istnieje metoda GregorianCalendar#from(ZonedDateTime). Przeprowadzono dyskusję w Threeten-dev mail group, dlaczego ta metoda nie jest w klasie Calendar. Jednak nie jest to zbyt głęboka dyskusja.

Jednak nie ma bezpośredniej metody konwersji z Instant na Calendar. Masz mieć na to stan pośredni:

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

Jest to prawdopodobnie dlatego, że jak wynika z tabeli na this oracle tutorial, an Instant mapy do Date zamiast Calendar. Podobnie, ZonedDateTime mapuje do Calendar.

0

Co powiecie na GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))?

+0

Nie można uzyskać ZonedDateTime z TemporalAccessor: 2001-12-17T09: 30: 47Z typu java.time.Instant – Line

+0

Rzeczywiście, musisz także podać ID ZoneId. Zaktualizowałem swoją odpowiedź. –

1

Musisz uzyskać strefę czasową za pomocą błyskawicy, a następnie uzyskać kalendarz.

Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()));