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

📅  最后修改于: 2022-05-13 01:55:24.286000             🧑  作者: Mango

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

在用于处理时间和日期的Java 8 之前,我们有 Date、Calendar、TimeStamp (Java.util) 但存在一些性能问题以及一些方法和类已被弃用,因此Java 8 引入了一些新概念 Date and Time APIs' (也称为 Joda 时间 API')存在于Java.time 包中。

Java 7:日期、日历、时间戳存在于Java.util 包中。

Java 8:时间日期 API 存在于Java.time 包中。

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

  1. 使用 Instance 和 ZonedDateTime
  2. 使用 Instant 和 Date.getTime()
  3. 使用 ofInstant() 和 ZoneId.systemDefault()

方法 1:使用 Instance 和ZonedDateTime

方法:

  • 首先,我们将日期对象转换为即时对象。
  • 每个即时对象都与 zoneId 相关联,因此我们需要提供 zoneId。
  • 最后我们将其转换为 LocalDate 对象。

例子:

  • 在这个程序中,我们将使用日期对象转换为即时对象 toInstant()方法返回即时对象并且不接受任何参数。
  • 现在我们需要使用atZone()方法将 zoneId 分配给它,我们需要将 zone Id 作为参数传递给我们可以使用的默认值 ZoneId.systemDefault()
  • 最后,我们将使用toLocalDate()将其转换为 LocalDate 对象 方法。

句法:

date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
Java
// Java program to convert java.util.Date to
// java.time.LocalDate
//  Using Instance and ZonedDateTime
  
import java.io.*;
import java.time.*;
import java.util.Date;
  
class GFG {
    public static void main(String[] args)
    {
  
        // first create date object
        Date current = new Date();
  
        // first convert the date object to instant using
        // toInstant() then add zoneId using .atZone() at
        // last convert into localDate using toLocalDate()
  
        LocalDate local = current.toInstant()
                  .atZone(ZoneId.systemDefault())
                  .toLocalDate();
  
        // printing the local date object
        System.out.println(local);
    }
}


Java
// Java program to convert java.util.Date to
// java.time.LocalDate
// Using Instant and Date.getTime()
  
import java.io.*;
import java.time.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // first create date object
        Date current = new Date();
  
        // first create instant object using
        // Instant.ofEpochMilli(date.getTime()) than add
        // zoneId using .atZone() at last convert into
        // localDate using toLocalDate()
        LocalDate local = Instant.ofEpochMilli(current.getTime())
                  .atZone(ZoneId.systemDefault())
                  .toLocalDate();
  
        // printing the local date object
        System.out.println(local);
    }
}


Java
// Java program to convert java.util.Date to
// java.time.LocalDate
//  Using ofInstant() and ZoneId.systemDefault()
  
import java.io.*;
import java.time.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // first create date object
        Date current = new Date();
  
        // use ofInstant method of LocalDate class
        // pass instant object and zone id as parameters
  
        LocalDate local = LocalDate.ofInstant(
            current.toInstant(), ZoneId.systemDefault());
  
        // printing the local date object
        System.out.println(local);
    }
}


输出
2020-12-21

方法 2:使用 Instant 和Date.getTime()

这种方法与第一种方法几乎相似,唯一的区别是创建即时对象的方式。

  • 这里我们将使用Instant.ofEpochMilli()方法,它以日期作为参数。
  • 之后,我们将再次使用atZone()方法添加 ZoneId 后跟toLocalDate() 获取 LocalDate 对象的方法。

句法:

Instant.ofEpochMilli(date.getTime()) .atZone(ZoneId.systemDefault()).toLocalDate()

Java

// Java program to convert java.util.Date to
// java.time.LocalDate
// Using Instant and Date.getTime()
  
import java.io.*;
import java.time.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // first create date object
        Date current = new Date();
  
        // first create instant object using
        // Instant.ofEpochMilli(date.getTime()) than add
        // zoneId using .atZone() at last convert into
        // localDate using toLocalDate()
        LocalDate local = Instant.ofEpochMilli(current.getTime())
                  .atZone(ZoneId.systemDefault())
                  .toLocalDate();
  
        // printing the local date object
        System.out.println(local);
    }
}
输出
2020-12-21

方法 3:使用ofInstant()ZoneId.systemDefault()

  • 这是最简单的方法,我们将使用Java 9 的 LocalDate 类的ofInstant()方法,它需要两个参数。
  • 第一个参数是日期的即时对象,第二个参数是 ZoneId。
  • 在第一个参数中,我们将使用toInstant()方法来获取即时对象,对于第二个参数,我们将使用ZoneId.systemDefault()

句法

LocalDate.ofInstant(date.toInstant(), ZoneId.systemDefault());

Java

// Java program to convert java.util.Date to
// java.time.LocalDate
//  Using ofInstant() and ZoneId.systemDefault()
  
import java.io.*;
import java.time.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // first create date object
        Date current = new Date();
  
        // use ofInstant method of LocalDate class
        // pass instant object and zone id as parameters
  
        LocalDate local = LocalDate.ofInstant(
            current.toInstant(), ZoneId.systemDefault());
  
        // printing the local date object
        System.out.println(local);
    }
}
输出
2020-12-21