如何在Java 8中把日期转换成本地日期--实例教程

103 阅读3分钟

大家好,如果你想学习如何在Java 8中把旧的Date转换成新的LocalDate,那么你就来对地方了。在这篇文章中,我将教你如何在Java中把Date转换为LocalDate。你可能知道JDK 8引入了新的日期和时间API,它有一套新的闪亮的日期类,如LocalDate、LocalTime等,但你仍然有很多针对java.util.Date编写的代码?为了处理这些代码,你应该知道如何在Java中把java.util.Date转换为java.util.LocalDate。

实际上有多种方法可以进行这种转换。例如,你也可以在这里使用java.sql.Date类,因为它提供了toLocalDate()和toInstant()等直接转换方法。

另一件重要的事情是,Java 8中java.util.Date的对应类是Instant,而不是LocalDate

如何在Java 8中把Date转换成LocalDate?例子

尽管它的名字是java.util.Date,但它代表了时间线上的一个瞬间,而不是一个 "日期"。该对象中存储的实际数据是自1970-01-01T00:00Z(1970年GMT/UTC开始的午夜)以来的毫秒计数。

JSR-310中与java.util.Date相当的类是Instant,因此有一个类似toInstant() 的方便方法来提供转换。

Date input = new Date()
Instant instant = input.toInstant()

java.util.Date实例没有时区的概念。如果你在java.util.Date上调用toString(),这可能看起来很奇怪,因为toString是相对于时区的。然而,该方法实际上是使用Java的默认时区来提供字符串。时区不是java.util.Date的实际状态的一部分。

一个Instant也不包含任何关于时区的信息。因此,要想从Instant转换为本地日期,就必须指定一个时区。这可能是默认的时区--ZoneId.systemDefault(),也可能是你的应用程序控制的时区,例如来自用户偏好的时区。使用atZone()方法来应用该时区。

Date input = new Date()

一个 ZonedDateTime包含一个由本地日期和时间、时区和GMT/UTC的偏移量组成的状态。因此,使用toLocalDate() 可以很容易地提取出日期--LocalDate。

How to convert Date to LocalDate in Java 8 - Example Tutorial

在Java 8中把日期转换成本地日期的Java程序

不用再浪费你的时间了,这里有一个完整的程序,在Java 8中 把Date对象转换成LocalDate实例。

package test;
 
import java.time.Instant;
import java.time.LocalDate; 
import java.time.ZoneId; 
import java.time.ZonedDateTime; 
import java.util.Date;
 
 
/\*\*
 \* Java Program to show how to convert java.util.Date and LocalDate in Java 8.
 \* There are multiple ways to convert Date to LocateDate, as we see in this
 \* article. 
 \* 
 \* @author Javin
 
 \*/
 
public class Test {
  
    public static void main(String args\[\]) {
   
        // Easiest way is by using java.sql.Date which is modified in Java 8 
        // and contains direct conversion method with new Date and Time 
        // classes e.g. toLocalDate() and toLocalTime()
 
        Date date \= new java.util.Date(); 
        LocalDate localDate \= new java.sql.Date(date.getTime()).toLocalDate(); 
        System.out.println("1st way to convert Date to LocalDate in Java 8 : "
                                + localDate);
   
 
        // By using Instant class op Java 8 
        Date currentDate \= new Date(); 
        Instant currentInstant \= currentDate.toInstant(); 
        ZonedDateTime zdt \= currentInstant.atZone(ZoneId.systemDefault()); 
        LocalDate lDate \= zdt.toLocalDate();
        System.out.println("2nd way to convert Date to LocalDate in Java 8 : " 
                                + lDate);
   
    }
 
} 
Output:
 
1st way to convert Date to LocalDate in Java 8 : 2015\-01\-27 
2nd way to convert Date to LocalDate in Java 8 : 2015\-01\-27

以上就是关于如何在Java 8中把Date转换为LocalDate的全部内容。在这个例子中,我向你展示了在Java中把给定的Date转换成LocalDate的两种方法,一种是使用java.sql.Date,另一种是使用Java time API中的Instant类。你可以使用其中任何一种方法在Java 8中把Date转换为LocalDate。

感谢你阅读本文至今,如果你喜欢这个Java日期和时间教程,那么请与你的朋友和同事分享它。如果您有任何问题或反馈,请留言。