📜  在Java中将Java .util.Date 转换为Java .time.LocalDate 的不同方法(1)

📅  最后修改于: 2023-12-03 15:23:24.353000             🧑  作者: Mango

在Java中将Java .util.Date 转换为Java .time.LocalDate 的不同方法

在Java中,我们有时需要将 java.util.Date 转换成 java.time.LocalDate。以下是几种不同方法:

方法1:使用Instant和ZoneId

Java 8引入了Instant和ZoneId来处理日期和时间的新API。可以使用这两个类将 java.util.Date 转换成java.time.LocalDate:

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

public class DateToLocalDate1 {
    public static void main(String[] args) {
        Date date = new Date();
        Instant instant = date.toInstant();
        LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
        System.out.println("Date: " + date);
        System.out.println("LocalDate: " + localDate);
    }
}

此方法使用 date.toInstant() 将 Java.util.Date 转换为 java.time.Instant,然后使用 Instant.atZone() 方法将它转换成 java.time.ZonedDateTime 对象。 atZone()方法的参数是一个 java.time.ZoneId 对象,它使用系统默认的时区。最后,我们将 ZonedDateTime 对象转换成 java.time.LocalDate 对象,这是我们需要的结果。

方法2:使用Calendar和toInstant方法

还可以使用java.util.Calendar类将日期从时间戳转换成LocalDate:

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

public class DateToLocalDate2 {
    public static void main(String[] args) {
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        LocalDate localDate = calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        System.out.println("Date: " + date);
        System.out.println("LocalDate: " + localDate);
    }
}

此方法使用 Calendar.toInstant() 将 java.util.Calendar 对象转换成 java.time.Instant 对象,然后再将其转换成 java.time.LocalDate 对象。

方法3:使用SimpleDateFormat

还有一种方法是使用 SimpleDateFormat 类来将 java.util.Date 转换成 java.time.LocalDate:

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateToLocalDate3 {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate localDate = LocalDate.parse(dateFormat.format(date), dateTimeFormatter);
        System.out.println("Date: " + date);
        System.out.println("LocalDate: " + localDate);
    }
}

此方法使用 SimpleDateFormat 类将 java.util.Date 对象格式化为 yyyy-MM-dd 日期字符串(使用 dateFormat.format(date) 方法),然后将其解析为 java.time.LocalDate 对象(使用 LocalDate.parse() 方法)。我们还需要使用 DateTimeFormatter 类定义日期字符串格式。

以上就是将 java.util.Date 转换成 java.time.LocalDate 的几种方法。