2015-02-28 16 views
7

Cách đơn giản nhất để nhận đối tượng Calendar từ một số java.time.Instant hoặc java.time.ZonedDateTime là gì?Chuyển đổi java.time thành Lịch

+0

Bạn đã thử gì? Vấn đề là gì? Các javadoc là tự do có sẵn, bạn biết. –

+2

Đánh giá bởi danh tiếng của bạn, tôi nghi ngờ rằng bạn có thể đã kiểm tra 'Calendar cal = Calendar.getInstance(); cal.setTimeInMillis (Instant.now(). toEpochMilli()); 'Vậy có gì sai với giải pháp này? – Pshemo

+1

Và có lẽ bạn cũng đã thử - 'GregorianCalendar.from (zonedDateTime); ' –

Trả lời

8

Nhận Calendar ngay lập tức từ ZonedDateTime là khá đơn giản, miễn là bạn biết rằng có phương thức GregorianCalendar#from(ZonedDateTime). Đã có một cuộc thảo luận trong Threeten-dev mail group, về lý do tại sao phương thức đó không ở trong lớp Calendar. Không phải là một cuộc thảo luận rất sâu sắc.

Tuy nhiên, không có cách nào trực tiếp để chuyển đổi từ số Instant thành Calendar. Bạn đã có một trạng thái trung gian cho rằng:

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

Đây có lẽ là bởi vì, như hiển nhiên từ bảng trên this oracle tutorial, một Instant bản đồ để Date chứ không phải là một Calendar. Tương tự, một bản đồ ZonedDateTime đến Calendar.

0

Làm thế nào về GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))?

+0

Không thể lấy ZonedDateTime từ TemporalAccessor: 2001-12-17T09: 30: 47Z thuộc loại java.time.Instant – Line

+0

Thật vậy, bạn cũng cần chỉ định một ZoneId. Tôi đã cập nhật câu trả lời của mình. –

1

Bạn cần lấy TimeZone bằng cách sử dụng ngay lập tức và sau đó bạn có thể nhận được lịch.

Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())); 
Các vấn đề liên quan