jdk8中日期和时间api的使用

jdk8之前的日期和时间api非常难用,在jdk8中对其进行了很大的优化,并且此次优化将在今后一段时间内不再变更,所以相当重要。
之前的相关类主要有Date,Calender,SimpleDateFormat
在jdk8中提供了新的类LocalDateTime,Instant,DateTimeFormatter,我们可以使用新的类来替换原有的类实现同样的功能。

package com.atguigu.date;


import org.junit.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;

public class JDK8DateTimeTest {
    /**
     * LocalDate LocalTime LocalDateTime 的使用
     */
    @Test
    public void test1() {
        // 当前时间
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();

        System.out.println(localDate);
        System.out.println(localTime);
        System.out.println(localDateTime);

        // 创建指定年月日时分秒的时间
        LocalDateTime localDateTime1 = LocalDateTime.of(2020, 11, 27, 8, 55);
        System.out.println(localDateTime1);

        // getXxx() 获取相关的属性
        /*System.out.println(localDateTime.getDayOfMonth());
        System.out.println(localDateTime.getDayOfWeek());
        System.out.println(localDateTime.getMonth());
        System.out.println(localDateTime.getMonthValue());*/

        // withXxx() 可理解为 设置相关的属性
        // 体现不可变性 通过设置返回一个新的时间,原来的时间不变
        LocalDateTime localDateTime2 = localDateTime.withDayOfMonth(20);
        System.out.println(localDateTime);
        System.out.println(localDateTime2);

        LocalDateTime localDateTime3 = localDateTime.withHour(4);
        System.out.println(localDateTime3);

        // 加减
        // 不可变性
        LocalDateTime localDateTime4 = localDateTime.plusHours(8);
        System.out.println(localDateTime4);
        System.out.println(localDate);

        LocalDateTime localDateTime5 = localDateTime.minusMonths(4);
        System.out.println(localDateTime5);
        System.out.println(localDateTime);
    }

    /**
     * Instant的使用
     * 瞬时
     */
    @Test
    public void test2() {
        // 实例化
        Instant instant = Instant.now();
        System.out.println(instant); // 本初子午线所对应的时间
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);

        // 获取离1970.1.1的毫秒数
        long milli = instant.toEpochMilli();
        System.out.println(milli);

        // 通过离1970.1.1的毫秒数来实例化
        Instant instant1 = Instant.ofEpochMilli(1606441584674L);
        System.out.println(instant1);
    }

    /**
     * DateTimeFormatter的使用:格式化、解析 日期时间
     * 格式化:把日期转化为日期格式的字符串
     * 解析:格式化的逆过程,把日期格式的字符串转化为日期
     */
    @Test
    public void test3() {
        // 实例化
        //1 标注格式的formatter
        //2 本地格式的formatter
        //3 自定义格式的formatter

        // 主要用第三种 自定义格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        // 格式化
        String str = dateTimeFormatter.format(LocalDateTime.now());
        System.out.println(str);//2020-11-27 10:22:26
        // 解析
        TemporalAccessor parse = dateTimeFormatter.parse("2020-11-27 10:21:26");
        System.out.println(parse);

    }

}

posted @ 2020-11-27 10:48  yx袁祥  阅读(168)  评论(0)    收藏  举报