Skip to content

旧式的Date或Calendar如何转换为新API对象?

要将旧式的DateCalendar对象转换为新API对象,你可以使用 Java 8 引入的日期时间API(java.time包)。

下面是一些常见的转换示例:

  • 将 Date 对象转换为LocalDateTime对象
Date oldDate = new Date();
Instant instant = oldDate.toInstant();
LocalDateTime newDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
  • 将Date对象转换为ZonedDateTime对象
Date oldDate = new Date();
Instant instant = oldDate.toInstant();
ZonedDateTime newDateTime = instant.atZone(ZoneId.systemDefault());
  • 将Date对象转换为LocalDate对象
Date oldDate = new Date();
Instant instant = oldDate.toInstant();
LocalDate newDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();
  • Calendar对象转换为LocalDateTime对象
Calendar oldCalendar = Calendar.getInstance();
Instant instant = oldCalendar.toInstant();
LocalDateTime newDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

在进行这些转换时,你需要指定所需的时区。上述示例中,我使用了系统默认的时ZoneId.systemDefault(),你可以根据自己的需求选择适当的时区。

通过这种方式,你就可以将旧式的DateCalendar对象转换为新的日期时间API(java.time)提供的对象,并继续使用它们进行日期和时间操作。

如何把新的ZonedDateTime转换为旧的API对象?

要将新的ZonedDateTime对象转换为旧的日期时间API对象,您可以使用toInstant()方法将其转换为java.util.Date对象,然后再进一步转换为其他旧的 API 对象。

这是一个示例代码:

import java.time.ZonedDateTime;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // 创建一个新的 ZonedDateTime 对象
        ZonedDateTime zonedDateTime = ZonedDateTime.now();

        // 将 ZonedDateTime 转换为 Date
        Date date = Date.from(zonedDateTime.toInstant());

        // 进一步转换为旧的 API 对象(例如 Calendar)
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        // 打印结果
        System.out.println("ZonedDateTime: " + zonedDateTime);
        System.out.println("Date: " + date);
        System.out.println("Calendar: " + calendar);
    }
}

在上面的代码中,我们首先创建了一个新的ZonedDateTime对象。然后,我们使用toInstant()方法将其转换为java.util.Date对象。最后,我们通过调用Calendar.getInstance()获取一个Calendar实例,并使用setTime()方法将 Date 对象设置到Calendar中。

旧的日期时间API存在一些问题和限制,Java 8引入的新日期时间API提供了更好的功能和易用性。如果可能的话,建议尽量使用新的日期时间API来处理日期和时间。