将Java 8的LocalDateTime转换为Joda的LocalDateTime的简便方法

Nar*_*esh 16 java datetime jodatime java-time

有没有简单的方法将Java 8的LocalDateTime转换为Joda的LocalDateTime?

其中一种方法是将其转换为String,然后从该String创建Joda的LocalDateTime.

And*_*eas 18

通过epoch millis转换(基本上是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());
Run Code Online (Sandbox Code Playgroud)

单线,但很长,所以"容易"?这都是相对的.


ara*_*nid 5

这两种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());
}
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于LocalDateTime,而不是LocalDate。 (3认同)