05)JDK1.8 新特性学习 新的日期时间

JDK1.8引入了新的日期时间API,如LocalDateTime、LocalDate、LocalTime、ZonedDateTime和Instant等,旨在解决旧API的不足,更清晰地区分日期、时间、时区和时刻。新API提供了DateTimeFormatter以替代SimpleDateFormat,增强了日期时间运算的便利性,并对Month和Week的表示进行了修正,所有类型基本为不变类型,提升了安全性。
摘要由CSDN通过智能技术生成

先抄一段廖雪峰大牛 日期时间的解释

在计算机中,我们经常需要处理日期和时间。

这是日期:

2019-11-20
2020-1-1
这是时间:

12:30:59
2020-1-1 20:21:59
日期是指某一天,它不是连续变化的,而是应该被看成离散的。

而时间有两种概念,一种是不带日期的时间,例如,12:30:59。另一种是带日期的时间,例如,2020-1-1 20:21:59,只有这种带日期的时间能唯一确定某个时刻,不带日期的时间是无法确定一个唯一时刻的。

本地时间
当我们说当前时刻是2019年11月20日早上8:15的时候,我们说的实际上是本地时间。在国内就是北京时间。在这个时刻,如果地球上不同地方的人们同时看一眼手表,他们各自的本地时间是不同的:

所以,不同的时区,在同一时刻,本地时间是不同的。全球一共分为24个时区,伦敦所在的时区称为标准时区,其他时区按东/西偏移的小时区分,北京所在的时区是东八区。

从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:

本地日期和时间:LocalDateTime,LocalDate,LocalTime;
带时区的日期和时间:ZonedDateTime;
时刻:Instant;
时区:ZoneId,ZoneOffset;
时间间隔:Duration。
以及一套新的用于取代SimpleDateFormat的格式化类型DateTimeFormatter。

和旧的API相比,新API严格区分了时刻、本地日期、本地时间和带时区的日期时间,并且,对日期和时间进行运算更加方便。

此外,新API修正了旧API不合理的常量设计:

Month的范围用1~12表示1月到12月;
Week的范围用1~7表示周一到周日。
最后,新API的类型几乎全部是不变类型(和String类似),可以放心使用不必担心被修改。

package com.wying.demo.LocalDateApi;

import org.junit.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Set;

/**
 * description:jdk 1.8 新的日期时间
 * 最常用的类是LocalDate,LocalTime和LocalDateTime。
 *
 * LocalDate 和 LocalTime 和 Instant 一样遵守同样的线程规定――
 * 如它们的实例子都是不可变的。通过增加final实现
 * LocalDate 和 LocalTime 和 Instant 有同样的计算和比较方法
 * (其中有些方法是在 java.time.temporal.Temporal接口中定义的,并且上面这些类都实现了这些方法):
 *
 * date: 2021/11/16
 * author: gaom
 * version: 1.0
 */
public class LocalDateDemo01 {

    @Test
    public void test01() {


        /**
         * LocalDate表示在ISO格式(yyyy-MM-dd)下的不带具体时间的日期。
         * LocalDate.now()返回 yyyy-MM-dd 例2021-11-16  所以要获取时分秒时是不能使用LocalDate
         *
         *
         *
         */
        System.out.println("========LocalDate======");
        LocalDate localDate = LocalDate.now();
        System.out.println("localDate:" + localDate);
        System.out.println("localDate.getYear():" + localDate.getYear());
        System.out.println("localDate.getMonthValue():" + localDate.getMonthValue());
        System.out.println("localDate.getDayOfYear():" + localDate.getDayOfYear());


        /**
         *与LocalDate类似,可以从系统时钟或使用“parse”和“of”方法创建LocalTime实例
         * LocalTime.now()返回 hh24:mm:ss.xxx 例19:47:15.384 需要获取年月日时不能使用LocalDate类似
         */
        System.out.println("========LocalTime======");
        LocalTime localTime = LocalTime.now();
        System.out.println("localTime:" + localTime);
        System.out.println("localTime.getHour():" + localTime.getHour());

        /**
         *LocalDateTime用于表示日期和时间的组合。
         *
         * 当我们需要结合日期和时间时,这是最常用的类。该类提供了各种API
         * LocalDateTime.now() 返回 yyyy-MM-dd hh24:mm:ss.xxx  例2021-11-16T19:50:35.598
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值