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