栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java8新特性 - LocalDate、LocalDateTime、ZoneDateTime 与 Date 的相互转换

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8新特性 - LocalDate、LocalDateTime、ZoneDateTime 与 Date 的相互转换

1.需求概述
Java8中提供了新的日期时间类,帮助我们更便捷的操作日期和时间对象。
针对原来的Date类,如何在新的日期时间对象与Date类之间相互转化,本文做出详细的总结。
2.Java8中的Date与各类之间的关系
各个类的功能说明如下 : 
LocalDate :  Java8 日期类(默认时区,中国就是东八区)
LocalTime :  Java8 时间类(默认时区,中国就是东八区)
LocalDateTime : Java8 日期时间类(默认时区,中国就是东八区)
Instant :  Java8 时间戳类
ZoneDateTime :  Java8 带时区的日期时间类
Date : Java中的Date类,包 java.util.Date

关键的转换思路,可以根据下面的图进行理解:

3.具体的转换关系

下面的各个转换思路直接看代码,(结合上面的图更好理解)

3.1 LocalDate 转 Date
package com.northcastle.K_Date;

import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;

public class LocalDateTimeAndDate {
    public static void main(String[] args) {
        //0.准备一个Date的格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        
        LocalDate localDate01 = LocalDate.of(2022, 3, 25);
        LocalDateTime localDateTime01 = localDate01.atStartOfDay(); // 将 时分秒 设置为0
        // 思路一 :
        Instant instant0101 = localDateTime01.toInstant(ZoneOffset.of("+8")); //【这也是一种转换 Instant 的方法】
        Date date0101 = Date.from(instant0101);
        //思路二 :
        ZonedDateTime zonedDateTime01 = localDateTime01.atZone(ZoneId.systemDefault());
        Instant instant0102 = zonedDateTime01.toInstant();
        Date date0102 = Date.from(instant0102);

        System.out.println("localDate01 = " + localDate01);
        System.out.println("localDateTime01 = " + localDateTime01);
        System.out.println("zonedDateTime01 = " + zonedDateTime01);
        System.out.println("instant0101 = " + instant0101);
        System.out.println("date0101 = " + sdf.format(date0101));
        System.out.println("instant0102 = " + instant0102);
        System.out.println("date0102 = " + sdf.format(date0102));
        System.out.println("=======================");
       
    }
}

3.2 LocalDateTime 转 Date
package com.northcastle.K_Date;

import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;

public class LocalDateTimeAndDate {
    public static void main(String[] args) {
        //0.准备一个Date的格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

          
        LocalDateTime localDateTime02 = LocalDateTime.of(2022, 3, 25, 22, 34, 30);
        // 思路一 :
        Instant instant0201 = localDateTime02.toInstant(ZoneOffset.of("+8"));
        Date date0201 = Date.from(instant0201);
        // 思路二 :
        ZonedDateTime zonedDateTime02 = localDateTime02.atZone(ZoneId.systemDefault());
        Instant instant0202 = zonedDateTime02.toInstant();
        Date date0202 = Date.from(instant0202);
        System.out.println("localDateTime02 = " + localDateTime02);
        System.out.println("zonedDateTime02 = " + zonedDateTime02);
        System.out.println("instant0201 = " + instant0201);
        System.out.println("date0201 = " + sdf.format(date0201));
        System.out.println("instant0202 = " + instant0202);
        System.out.println("date0202 = " + sdf.format(date0202));
        System.out.println("=======================");
    }
}

3.3 ZoneDateTime 转 Date
package com.northcastle.K_Date;

import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;

public class LocalDateTimeAndDate {
    public static void main(String[] args) {
        //0.准备一个Date的格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     
        
        ZonedDateTime zonedDateTime03 = ZonedDateTime.of(2022, 3, 25, 22, 36, 56, 0, ZoneId.systemDefault());
        Instant instant03 = zonedDateTime03.toInstant();
        Date date03 = Date.from(instant03);
        System.out.println("zonedDateTime03 = " + zonedDateTime03);
        System.out.println("instant03 = " + instant03);
        System.out.println("date03 = " + sdf.format(date03));
        System.out.println("=======================");
    }
}

3.4 Date 转 ZoneDateTime
package com.northcastle.K_Date;

import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;

public class LocalDateTimeAndDate {
    public static void main(String[] args) {
        //0.准备一个Date的格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        
        Date date04 = new Date();
        Instant instant04 = date04.toInstant();
        ZonedDateTime zonedDateTime04 = ZonedDateTime.ofInstant(instant04, ZoneId.systemDefault());
        System.out.println("date04 = " + sdf.format(date04));
        System.out.println("instant04 = " + instant04);
        System.out.println("zonedDateTime04 = " + zonedDateTime04);
        System.out.println("=======================");
    }
}

3.5 Date 转 LocalDateTime
package com.northcastle.K_Date;

import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;

public class LocalDateTimeAndDate {
    public static void main(String[] args) {
        //0.准备一个Date的格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        
        Date date05 = new Date();
        Instant instant05 = date05.toInstant();
        //思路一 : Date --> Instant --> ZoneDateTime --> LocalDateTime
        LocalDateTime localDateTime0501 = ZonedDateTime.ofInstant(instant05, ZoneId.systemDefault()).toLocalDateTime();
        //思路二 : Date --> Instant --> LocalDateTime.of(Instant,ZoneId)
        LocalDateTime localDateTime0502 = LocalDateTime.ofInstant(instant05, ZoneId.systemDefault());

        System.out.println("date05 = " + sdf.format(date05));
        System.out.println("instant05 = " + instant05);
        System.out.println("localDateTime0501 = " + localDateTime0501);
        System.out.println("localDateTime0502 = " + localDateTime0502);
        System.out.println("=======================");
    }
}

3.6 Date 转 LocalDate
package com.northcastle.K_Date;

import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;

public class LocalDateTimeAndDate {
    public static void main(String[] args) {
        //0.准备一个Date的格式化对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        
        Date date06 = new Date();
        Instant instant06 = date06.toInstant();
        //思路一 : Date --> Instant --> ZoneDateTime --> LocalDateTime --> LocalDate
        LocalDate localDate0601 = ZonedDateTime.ofInstant(instant06, ZoneId.systemDefault()).toLocalDateTime().toLocalDate();
        //思路二 : Date --> Instant --> LocalDateTime.of(Instant,ZoneId) --> LocalDate
        LocalDate localDate0602 = LocalDateTime.ofInstant(instant06, ZoneId.systemDefault()).toLocalDate();

        System.out.println("date06 = " + sdf.format(date06));
        System.out.println("instant06 = " + instant06);
        System.out.println("localDate0601 = " + localDate0601);
        System.out.println("localDate0602 = " + localDate0602);
        System.out.println("=======================");
    }
}

4.完成

Congratulations!
You are one step closer to success!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号