2015-10-09 28 views
10

Czy istnieje łatwy sposób na konwersję LocalDateTime Java 8 na LocalDateTime firmy Joda?Łatwy sposób na konwersję LocalDateTime Java 8 na LocalDateTime Jody

Jednym ze sposobów jest przekonwertowanie go na String, a następnie utworzenie LocalDateTime firmy Joda z tego łańcucha.

+0

Konwertuj na format "String" w formacie ISO i odtwórz go ponownie. Konwertuj go na milisekundy od epoki – MadProgrammer

+0

Tak. Zrobiłem to samo. – Naresh

+0

Dlaczego chcesz używać Joda Time, jeśli już używasz 'java.time'? – Tom

Odpowiedz

9

Konwersja poprzez Millis Epoki (zasadniczo 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()); 

jednej linii, ale długo tak "proste"? Wszystko jest względne.

4

Oba typy LOCALDATE składać (year, month, date), więc po prostu skopiować te wartości:

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

Pytanie dotyczy LocalDateTime, a nie LocalDate. –

0

Nieco krótsza metoda:

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

Wywołanie metody atZone można usunąć poprzez dostarczanie strefy czasowej do metody ToInstant.