java8日期相关类的由来和概述(熟悉)

1、java8日期的由来

  JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被
弃用
了。而Calendar并不比Date好多少。它们面临的问题是:
  Date类中的年份是从1900开始的,而月份都从0开始。
  格式化只对Date类有用,对Calendar类则不能使用。
  非线程安全等。

2、java8日期类的概念

Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理。
java.time包:该包日期/时间API的基础包。
java.time.chrono包:该包提供对不同日历系统的访问。
java.time.format包:该包能够格式化和解析日期时间对象。
java.time.temporal包:该包包含底层框架和扩展特性。
java.time.zone包:该包支持不同时区以及相关规则的类。

日期时间对象创建和特征获取

LocalDate类的概述

1、基本概念

java.time.LocalDate类主要用于描述年-月-日格式的日期信息,该类不表示时间和时区信息。

2、常用的方法

LocalTime类的概述

1、基本概念

java.time.LocalTime 类主要用于描述时间信息,可以描述时分秒以及纳秒。

2、常用的方法

LocalDateTime类的概念

1、基本概念

java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间,如2007-12-
03T10:15:30。

2、常用的方法 

 各类中的now()方法,以及常用的LocalDateTime类获取特征

package com.lagou.task13;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class LocalDateTimeTest {
    public static void main(String[] args) {
        //  1.获取当前日期信息并打印
        LocalDate now = LocalDate.now();
        System.out.println("获取到的当前时间是:"+now);
        //  2.获取当前时间信息并打印
        LocalTime now1 = LocalTime.now();
        System.out.println("获取到的当前日期是:"+now1);
        //  3.获取当前日期时间信息并打印,使用最多
        LocalDateTime now2 = LocalDateTime.now();
        System.out.println("获取到的当前日期时间是:"+now2);

        System.out.println("---------------------------------");
        //  4.使用参数指定的年月日时分秒信息来获取对象并打印
        //  使用ctrl+f12来查找指定的方法
        LocalDateTime of = LocalDateTime.of(2008, 8, 8, 8, 8, 8);
        System.out.println("指定的日期时间是:"+of);
        System.out.println("获取到的年份是:"+of.getYear());
        System.out.println("获取到的月份是:"+of.getMonthValue());
        System.out.println("获取到的日期是:"+of.getDayOfMonth());
        System.out.println("获取到的小时是:"+of.getHour());
        System.out.println("获取到的分钟是:"+of.getMinute());
        System.out.println("获取到的秒是:"+of.getSecond());
    }
}

lacaldatetime类的增加减少方法

 System.out.println("---------------------------------");
        //  5.实现特征的设置并打印
        //  与String类型相似,调用对象本身的数据内容不会改变,返回值相当于创建了一个新的对象,由此证明了不可变性
        LocalDateTime localDateTime = of.withYear(2012);    //  修改年份
        System.out.println("修改前的年份是:"+of.getYear());
        System.out.println("修改后的年份是"+localDateTime);
        LocalDateTime localDateTime1 = localDateTime.withMonth(12);   //  修改月份
        System.out.println("修改前的月份是"+of.getMonthValue());
        System.out.println("修改后的月份是"+localDateTime1);

        System.out.println("---------------------------------");
        //  6.实现特征的增加并打印
        LocalDateTime localDateTime2 = localDateTime1.plusDays(2);  //  增加日
        System.out.println("原始时间"+localDateTime1);
        System.out.println("修改后的时间:"+localDateTime2);
        LocalDateTime localDateTime3 = localDateTime2.plusHours(3); //  增加小时
        System.out.println("原始时间"+localDateTime2);
        System.out.println("修改后的时间:"+localDateTime3);

        System.out.println("---------------------------------");
        //  7.实现特征的减少并打印
        LocalDateTime localDateTime4 = localDateTime3.minusMinutes(1);  //  减少1分钟
        System.out.println("原始时间"+localDateTime3);
        System.out.println("修改后的时间:"+localDateTime4);
        LocalDateTime localDateTime5 = localDateTime3.minusSeconds(3);  //  减少3秒钟
        System.out.println("原始时间"+localDateTime3);
        System.out.println("修改后的时间:"+localDateTime5);

Instant类的概念和使用

1、基本概念

java.time.Instant类主要用于描述瞬间的时间点信息。

2、常用的方法

package com.lagou.task13;

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;

public class InstantTest {
    public static void main(String[] args) {
        //  1.使用instant类来获取当前系统时间   并不是当前系统的默认时区    本初子午线   我们在东八区差8小时
        Instant now = Instant.now();
        System.out.println("获取到的当前时间为:"+now);

        System.out.println("--------------------------------------------------");
        //  2.加上时区所差的8小时
        OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
        System.out.println("偏移后的日期时间为:"+offsetDateTime);

        System.out.println("--------------------------------------------------");
        //  3.获取当前调用对象距离标准基准时间的毫秒数
        long g1 = now.toEpochMilli();
        System.out.println("获取到的毫秒差为:" + g1);   //  获取到的毫秒数也是差8个小时

        //  4.根据参数指定的毫秒数来构造对象
        Instant instant = Instant.ofEpochMilli(g1);
        System.out.println("根据参数指定的毫秒数构造出来的对象为:"+instant);

    }
}

 DateTimeFormatter类的概述

1、基本概念

java.time.format.DateTimeFormatter类主要用于格式化和解析日期。

2、常用的方法

package com.lagou.task13;

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

public class DateTimeFormatterTest {
    public static void main(String[] args) {
        //  1.获取当前系统的日期时间并打印
        LocalDateTime now = LocalDateTime.now();    //  创建时间对象
        System.out.println("now="+now);
        //  2.按照指定的格式准备一个DateTimeFormatter类型的对象
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");   //  创建对象
        //  3.实现日期时间向字符串类型的转换并打印
        String format = dateTimeFormatter.format(now);
        System.out.println("调整后的结果是:"+format);
        //  4.实现字符串类型到日期时间类型的转换并打印
        TemporalAccessor parse = dateTimeFormatter.parse(format);
        System.out.println("转回去的结果是:"+parse);
    }
}
原文地址:https://www.cnblogs.com/xujiaqi/p/13927235.html