Простой способ конвертировать Java 8 LocalDateTime в Joda LocalDateTime Есть ли простой способ конвертировать Java 8 LocalDateTime в Joda LocalDateTime? Один из способов - преобразовать его в String, а затем создать Joda LocalDateTime из этой строки. Ответ 1 Преобразуйте миллионы эпох (по существу a 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()); Одиночная линия, но длинная, так "легкая"? Все это относительное. Ответ 2 Оба типа 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()); } Ответ 3 Несколько более короткий метод: 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.
Ответ 1 Преобразуйте миллионы эпох (по существу a 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()); Одиночная линия, но длинная, так "легкая"? Все это относительное.
Ответ 2 Оба типа 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()); }
Ответ 3 Несколько более короткий метод: 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.