在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 的不同方法:
- 使用 Instance 和 ZonedDateTime
- 使用 Instant 和 Date.getTime()
- 使用 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