Java基础编程-JDK8新增日期时间API

本文全文参考 https://www.bilibili.com/video

日期时间API的迭代:

  • 第一代:jdk 1.0 Date类
  • 第二代:jdk 1.1 Calendar类,一定程度上替换Date类
  • 第三代:jdk 1.8 提出了新的一套API

前两代存在的问题举例:

  • 可变性:像日期和时间这样的类应该是不可变的。
  • 偏移性:Date中的年份是从1900开始的,而月份都从0开始。
  • 格式化:格式化只对Date用,Calendar则不行。
  • 此外,它们也不是线程安全的;不能处理闰秒等。

java 8 中新的日期时间API涉及到的包

在这里插入图片描述

本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间的使用(LocalDateTime)

4.1 说明:

  • ① 分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
  • ② LocalDateTime相较于LocalDate、LocalTime,使用频率要高
  • ③ 类似于Calendar

4.2 常用方法:

在这里插入图片描述

        // now():获取当前的日期、时间、日期+时间
        LocalDate localDate = LocalDate.now(); // 2020-03-24
        LocalTime localTime = LocalTime.now(); // 10:25:45.991
        LocalDateTime localDateTime = LocalDateTime.now(); // 2020-03-24T10:25:45.991

        // of():设置指定的年、月、日、时、分、秒。没有偏移量
        LocalDateTime of = LocalDateTime.of(2020, 3, 24, 10, 41, 59);
        System.out.println(of); // 2020-03-24T10:41:59

        // getXxx()
        localDateTime.getDayOfWeek();//TUESDAY
        localDateTime.getDayOfMonth(); //24
        localDateTime.getDayOfYear(); //84
        localDateTime.getMinute(); // 46
        localDateTime.getHour(); // 10
        localDateTime.getMonth(); //MARCH
        localDateTime.getMonthValue(); // 3
        localDateTime.getYear(); // 2020

        // withXxx()-----不可变性
        // 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
        LocalDate localDate1 = localDate.withDayOfMonth(23); // 设置月份天数
        System.out.println(localDate); //2020-03-24 原来的值没有改变
        System.out.println(localDate1); //2020-03-23
        LocalDateTime localDateTime1 = localDateTime.withHour(11); // 设置小时数

        // plusXxx()----不可变性
        // 向当前对象添加几天、几周、几个月、几年、几小时
        LocalDateTime localDateTime2 = localDateTime.plusMonths(3);

        // minusXxx()----不可变性
        // 从当前对象减去几月、几周、几天、几年、几小时
        LocalDateTime localDateTime3 = localDateTime.minusHours(12);

时间点:Instant

5.1 说明:

  • ① 时间线上的一个瞬时点。 概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC开始的秒数。)
  • 类似于 java.util.Date类

5.2 常用方法:

在这里插入图片描述

        // now()
        Instant instant = Instant.now();
        System.out.println(instant); // 2020-03-24T03:12:11.347Z

        // atOffset()
        OffsetDateTime offset = instant.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offset); // 2020-03-24T11:14:16.681+08:00

        // toEpochMilli()
        long epochMilli = instant.toEpochMilli();
        System.out.println(epochMilli); // 1585019727730

        // ofEpochMilli() 根据毫秒数创建Instant对象
        Instant instant1 = Instant.ofEpochMilli(1585019727730L);
        System.out.println(instant1);

日期时间格式化类:DateTimeFormatter

6.1 说明:

  • ① 格式化或解析日期、时间
  • ② 类似于SimpleDateFormat

6.2 常用方法:

  • ① 实例化方式:
    • 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
    • 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
    • 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
  • ② 常用方法:
    在这里插入图片描述
  • 特别的:自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
		//预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
        DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime); // // 2020-03-24T11:28:20.175
        String format = formatter.format(localDateTime);
        System.out.println(format); // 2020-03-24T11:28:20.175
        // 解析:字符串--》日期
        TemporalAccessor parse = formatter.parse("2020-03-24T11:28:20.175");
        System.out.println(parse); // {},ISO resolved to 2020-03-24T11:28:20.175

		// 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
        DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
        String format1 = formatter1.format(localDateTime);
        System.out.println(format1); // 2020年3月24日 上午11时33分31秒
        
		// *重点:自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
		DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
		//格式化
		String str4 = formatter3.format(LocalDateTime.now());
		System.out.println(str4);//2019-02-18 03:52:09
		
		//解析
		TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09");
		System.out.println(accessor);

其他时间API

在这里插入图片描述

发布了17 篇原创文章 · 获赞 0 · 访问量 162

猜你喜欢

转载自blog.csdn.net/qq_33565238/article/details/105059163
今日推荐