2015-10-09 4 views
10

Есть ли простой способ конвертировать LocalDateTime Java 8 в LocalDateTime от Joda?Простой способ конвертировать LocalDateTime Java 8 в LocalDateTime от Joda

Один из способов - преобразовать его в String, а затем создать LocalDateTime от Joda из этой строки.

+0

Преобразуйте его в форматированный в формате '' String'' и проанализируйте его снова. Преобразуйте его в миллисекунду с эпохи – MadProgrammer

+0

Да. Я сделал то же самое. – Naresh

+0

Почему вы хотите использовать Joda Time, если вы уже используете 'java.time'? – Tom

ответ

9

Преобразование через эпоху Millis (по существу 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()); 

одинарных, но долго, так что "легко"? Это все относительно.

4

Оба типа LocalDate состоят из (year, month, date), так что просто скопировать эти значения:

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

Вопрос только в LocalDateTime, а не в LocalDate. –

0

Немного короче метод:

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

Вызов метода atZone может быть отброшен, обеспечивая смещение часового пояса к методу toInstant.