2015-10-09 11 views
10

C'è un modo semplice per convertire LocalDateTime di Java 8 in LocalDateTime di Joda?Un modo semplice per convertire LocalDateTime di Java 8 in LocalDateTime di Joda

Uno dei modi è convertirlo in stringa e quindi creare LocalDateTime di Joda da quella stringa.

+0

Converti in un 'String' formattato ISO e analizzalo di nuovo. Convertilo in millisecondi dall'epoca – MadProgrammer

+0

Sì. Ho fatto allo stesso modo. – Naresh

+0

Perché si desidera utilizzare Joda Time se si utilizza già 'java.time'? – Tom

risposta

9

Convert attraverso millis epoca (essenzialmente un 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()); 

singola linea, ma a lungo, in modo "facile"? È tutto relativo.

4

Entrambi i tipi localDate consistono (year, month, date), quindi basta copiare tali valori:

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

La domanda riguarda LocalDateTime, non LocalDate. –

0

Un metodo leggermente più corta:

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

La chiamata al metodo atZone possono essere lasciati fornendo l'offset fuso orario al metodo toInstant.

Problemi correlati