如何将Java 8 Calendar转换为 LocalDateTime?

22-09-18 banq

在 Java 8 中将 Calendar 对象转换为 LocalDateTime 的快速示例。而LocalDateTime.ofInstant() 用于将 Calendar 转换为 LocalDateTime 对象。
LocalDateTime api 可以完全替代 Date 类,因为 Date 函数的所有功能都以简单而精确的方式完成。

要将 Calendar 转换为 LocalDateTime,您需要执行以下步骤。
步骤1:
首先,使用返回 Calendar 对象的 Calendar.getInstance() 方法创建一个Calendar实例 。
第2步 :
接下来,使用calendar.getTimeZone() 方法从日历实例中获取时区。
第 3 步:
现在,使用timezone.toZoneId()方法从 TimeZone 类中 获取ZoneId对象。
最后, 使用日历即时和区域 ID 值调用LocalDateTime.ofInstant(calendar.toInstant(), zoneId)方法

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.TimeZone;

public class CalenderToLocalDateTimeExample {

    public static void main(String[] args) {

        //Create a calender instance.
        Calendar calendar = Calendar.getInstance();

        System.out.println("Calender instance : "+calendar);

        // Getting the timezone
        TimeZone tz = calendar.getTimeZone();

        // Getting zone id
        ZoneId zoneId = tz.toZoneId();

        // conversion
        LocalDateTime localDateTime = LocalDateTime.ofInstant(calendar.toInstant(), zoneId);

        System.out.println("Local date time object  : "+localDateTime);

    }
}


import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

public class CalenderToLocalDateExample {

    public static void main(String[] args) {

        Calendar cal = Calendar.getInstance();
        Date input = cal.getTime();
        LocalDate la = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

        System.out.println("Calender to LocalDate : "+la);
    }
}


可以在一行中将转换为 Java 8 中的 LocalDateTime 和 LocalDate。为重用 . 编写单独的方法是一种很好的做法:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Calendar;

public class SingleLineCalenderToLocalDateTimeExample {

    public static void main(String[] args) {

        //Create a calender instance.
        Calendar calendar = Calendar.getInstance();


        LocalDateTime singleLineLocalDateTime = getLocalDateTime(calendar);
        LocalDate singleLineLocalDate = getLocalDate(calendar);

        System.out.println("Converted LocalDateTime : "+singleLineLocalDateTime);
        System.out.println("Converted LocalDate : "+singleLineLocalDate);

    }

    private static LocalDateTime getLocalDateTime(Calendar calendar){

        return  LocalDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId());
    }

    private static LocalDate getLocalDate(Calendar calendar){

        return  LocalDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId()).toLocalDate();
    }
}


显示的程序示例在 GitHub 中。

CalenderToLocalDateExample.java

CalenderToLocalDateTimeExample.java

SingleLineCalenderToLocalDateTimeExample.java