2015-02-28 7 views
7

Calendar nesnesinin java.time.Instant veya java.time.ZonedDateTime'dan almanın en basit yolu nedir?java.time öğesini Takvim'e dönüştürme

+0

Ne denediniz? Sorun nedir? Javadoc serbestçe kullanılabilir, biliyorsun. –

+2

Saygınlığınızla ilgili olarak, muhtemelen 'Takvim cal = Calendar.getInstance(); cal.setTimeInMillis (Instant.now(). toEpochMilli()); 'peki bu çözümde sorun nedir? – Pshemo

+1

Ve muhtemelen siz de denediniz - 'GregorianCalendar.from (zonedDateTime); –

cevap

8

Bir GregorianCalendar#from(ZonedDateTime) yönteminin bulunduğunu bilmeniz koşuluyla ZonedDateTime numaralı telefondan Calendar anı almak oldukça kolaydır. Bu yöntemin neden Calendar sınıfında bulunmadığı hakkında Threeten-dev mail group numaralı makalede bir tartışma oluştu. Yine de çok derin bir tartışma değil. Ancak, Instant'dan Calendar'a dönüştürmenin doğrudan bir yolu yoktur. Bunun için bir ara devlet olması ettik:

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

Bu muhtemelen this oracle tutorial tabloda de anlaşılacağı üzere, çünkü, daha ziyade bir Calendar daha Date bir Instant haritalar. Benzer şekilde, ZonedDateTime, Calendar ile eşleşir.

0

GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId)) nasıl?

+0

TemporalAccessor'dan ZonedDateTime alınamadı: 2001-12-17T09: 30: 47Z java.time.Instant – Line

+0

Gerçekten de, bir ZoneId belirtmeniz gerekir. Cevabımı güncelledim. –

1

Anı kullanarak TimeZone'u almanız ve ardından bir takvim alabilmeniz gerekir.

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