网站菜单

JDK1.8(四) 日期和Java.util包之间的相互转换

(一)概述

Java.Time包中并没有过多的内置方法来转换java.util包中的预处理时间和日期的类,我们可以使用Instant类作为中介来对日期进行处理,也可以使用java.sql.Date和java.sql.Timestamp类提供的方法进行转换。

1.使用Instant类将java.util.Date转换为java.Time.LocalDate

虽然LocalDate和LocalTime都没有添加直接进行转换的方法,但是给之前的Date和Canlender类都添加了toInstant方法,可以将当前对象转为Instant对象,作为中介添加时区后转换为为LocalDate对象。

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

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

2.java.sql.Date类和java.sql.Timestamp类中的转换方法的使用

Date类和Timestamp类中都提供了直接转换为LocalDate的方法

import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;

public class DateToInstantToLocalDate2 {
    public static void main(String[] args) {
        Date date = new Date(System.currentTimeMillis());
        LocalDate localDate = date.toLocalDate();
        System.out.println(localDate);

        //初始化java.sql.Timestamp对象 -> 时间戳对象
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        LocalDateTime localDateTime = timestamp.toLocalDateTime();
        System.out.println(localDateTime);
    }
}

3.util.Date和LocalDate转换方法2

先将util.Date转换为sql.Date,再直接使用sql.Date的转换方法。
Date提供了一个获取毫秒值的方法,

        java.util.Date date = new java.util.Date(); 
        java.sql.Date date1 = new java.sql.Date(date.getTime());
        LocalDate localDate = date1.toLocalDate();

4.Canlendar类和LocalDate的转换

思路:使用Canlendar的toInstance方法,然后使用calendar.getTimeZone().toZoneId()拿到ZoneId。
最后封装进LocalDateTime即可。

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.TimeZone;

public class CanlenderToInstantToLocalDate {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        TimeZone timeZone = calendar.getTimeZone();
        ZoneId zoneId = timeZone.toZoneId();
        Instant instant = calendar.toInstant();
        LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
        System.out.println(localDateTime);
    }
}

5.日期的解析与格式化

SimpleDateFormat是线程不安全的,所以我们可以选择一种新的格式化日期的方法:
格式化:LocalDateTime.format()
解析字符串:LocalDateTime.parse(String)

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Format {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        String s1 = localDateTime.format(DateTimeFormatter.ISO_DATE);
        String s2 = localDateTime.format(DateTimeFormatter.ISO_DATE_TIME);
        System.out.println(s1);
        System.out.println(s2);

        //解析字符串的方法是通过parse方法传入需要解析的字符串
        LocalDateTime localDateTime1 = LocalDateTime.parse(s2);
        System.out.println(localDateTime1);
    }
}

还可以通过DateTimeFormatter.ofLocalizedDate来进行格式化:

        String s3 = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
        String s4 = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
        String s5 = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));
        String s6 = localDateTime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));

5.自定义格式化器

        String s7 = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));

这里需要使用到的是DateTimeFormatter.ofPattern()方法

相关推荐

JDK1.8(六) 反射

(一)什么是反射 除了基本类型外,所有的数据类型全部都是class 因此,每加载一个Class,就会创建一个实例对象,而一个Class实例中就记录了这个对象的所有信息。包括接口,所有方法,字段,父类等…

JDK1.8(五) 断言与日志

(一)断言 断言的作用: 断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。 断言可以用于开发和调试阶段: assert x >= 0 : &quo…