2015-10-09 17 views
10

Có cách nào dễ dàng để chuyển đổi LocalDateTime của Java 8 thành LocalDateTime của Joda không?Cách dễ dàng để chuyển đổi LocalDateTime của Java 8 sang LocalDateTime của Joda

Một trong những cách là chuyển đổi nó thành chuỗi và sau đó tạo LocalDateTime của Joda từ chuỗi đó.

+0

Chuyển đổi nó thành định dạng ISO 'Chuỗi' và phân tích cú pháp ngược lại. Chuyển đổi nó thành mili giây kể từ kỷ nguyên – MadProgrammer

+0

Có. Tôi cũng vậy. – Naresh

+0

Tại sao bạn muốn sử dụng Joda Time nếu bạn đã sử dụng 'java.time'? – Tom

Trả lời

9

Chuyển đổi qua millis kỷ nguyên (thực chất là một java.util.Date()):

java.time.LocalDateTime java8LocalDateTime = java.time.LocalDateTime.now(); 

// Separate steps, showing intermediate types 
java.time.ZonedDateTime java8ZonedDateTime = java8LocalDateTime.atZone(ZoneId.systemDefault()); 
java.time.Instant java8Instant = java8ZonedDateTime.toInstant(); 
long millis = java8Instant.toEpochMilli(); 
org.joda.time.LocalDateTime jodaLocalDateTime = new org.joda.time.LocalDateTime(millis); 

// Chained 
org.joda.time.LocalDateTime jodaLocalDateTime = 
     new org.joda.time.LocalDateTime(
      java8LocalDateTime.atZone(ZoneId.systemDefault()) 
           .toInstant() 
           .toEpochMilli() 
     ); 

// One-liner 
org.joda.time.LocalDateTime jodaLocalDateTime = new org.joda.time.LocalDateTime(java8LocalDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); 

dòng đơn, nhưng dài, do đó "dễ dàng"? Đó là tất cả tương đối.

4

Cả hai loại LOCALDATE bao gồm (year, month, date), vì vậy chỉ cần sao chép các giá trị:

public static org.joda.time.LocalDate toJoda(java.time.LocalDate input) { 
    return new org.joda.time.LocalDate(input.getYear(), 
             input.getMonthValue(), 
             input.getDayOfMonth()); 
} 
+0

Câu hỏi đặt ra là LocalDateTime, không phải LocalDate. –

0

Một phương pháp hơi ngắn hơn:

java.time.LocalDateTime java8LDT = java.time.LocalDateTime.now(); 
org.joda.time.LocalDateTime jodaLDT = new org.joda.time.LocalDateTime(
    java8LDT.toInstant(ZoneOffset.UTC).toEpochMilli() 
); 

Các cuộc gọi đến phương pháp atZone có thể được giảm bằng cách cung cấp các múi giờ bù đắp với phương thức toInstant.

Các vấn đề liên quan