5.常用API(JDK8时间类)(LocalDate,LocalTime,LocalDateTime,Period,Duration,ChronoUnit)

发布时间 2023-09-23 00:46:12作者: 回家太晚太悲催

常用API(JDK8时间类)(LocalDate,LocalTime,LocalDateTime,Period,Duration,ChronoUnit)

细节

  1. JDK8新增的时间对象都是不可变的;
  2. 如果我们修改了,减少了,增加了时间,那么调用者是不会发生改变的,会产生一个新的时间;
  3. ZoneId,Instant,ZonedDateTime类对应JDK7的Date类;
  4. DateTimeFormatter类对应SimpleDateFormat(日期格式化)类;
  5. LocalDate,LocalTime,LocalDateTime类对应Clendar(日历)类;

LocalDate,LocalTime,LocalDateTime类

概念:
LocalDate:可以单独修改、获取时间中的年、月、日
LocalTime:可以单独修改、获取时间中的时、分、秒
LocalDateTime:可以单独修改、获取时间中的年、月、日、时、分、秒
常用方法:
static XXX now()        获得本地时间的日历对象
static XXX of()         获得指定时间的对象
get开头的方法             获取日历中的年、月、日等信息
isBefore,isAfter       比较两个LocalDate
with开头的               修改时间系列的方法
minus开头的              减少时间系列的方法
plus开头的               增加时间系列的方法
具体方法:


Period类

概念: 计算时间间隔(年,月,日)
常用方法:
static Period between(LocalDate 第一个参数, LocalDate 第二个参数)     计算参数中的间隔(第二个参数减第一个参数)
int getYears()                                                                      获取间隔的年
int getMonths()                                                                     获取间隔的月
int getDays()                                                                       获取间隔的日
long toTotalMonths()                                                                计算时间间隔的总月份
具体方法:
package com.caihongjia2.a01jdk8datedmeo;

import java.time.LocalDate;
import java.time.Period;

public class A08PeriodDemo01 {
    public static void main(String[] args) {
        /*
        年月日
            static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)     计算参数中的间隔(第二个参数减第一个参数)
            int getYears()                                                                      获取间隔的年
            int getMonths()                                                                     获取间隔的月
            int getDays()                                                                       获取间隔的日
            long toTotalMonths()                                                                计算时间间隔的总月份
         */

        //当前日期(年,月,日)
        LocalDate today = LocalDate.now();
        System.out.println(today);

        //出生日期(年,月,日)
        LocalDate birthDate = LocalDate.of(2004, 2, 15);
        System.out.println(birthDate);

        Period period = Period.between(birthDate, today);//第二个参数减第一个参数
        System.out.println("相差的时间间隔对象:"+period);
        System.out.println(period.getYears()+"年");
        System.out.println(period.getMonths()+"月");
        System.out.println(period.getDays()+"日");

        System.out.println(period.toTotalMonths());//把时间间隔的总月份计算出来;
    }
}

Duration类

概念: 计算时间间隔(秒,纳秒)
常用方法:
static Duration between(Temporal 第一个参数, Temporal 第二个参数)     计算参数中的间隔(第二个参数减第一个参数)
long toXXX()                                                                返回两个时间差的对应数(天,小时,分钟,毫秒,纳秒等)
具体方法:
package com.caihongjia2.a01jdk8datedmeo;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;

public class A09DurationDemo01 {
    public static void main(String[] args) {
        /*
        秒,纳秒
        static Duration between(Temporal startInclusive, Temporal endExclusive)     计算参数中的间隔(第二个参数减第一个参数)
        long toXXX()                                                                返回两个时间差的对应数(天,小时,分钟,毫秒,纳秒等)
         */

        //当前日期(年,月,日)
        LocalDateTime today = LocalDateTime.now();
        System.out.println(today);

        //出生日期(年,月,日)
        LocalDateTime birthDate = LocalDateTime.of(2004, 2, 15,0,00,00);
        System.out.println(birthDate);

        Duration duration = Duration.between(birthDate, today);
        System.out.println("相差的时间间隔对象:"+duration);//PT169055H46M14.4565164S

        System.out.println("=====================================");
        System.out.println(duration.toDays());//两个时间差的天数
        System.out.println(duration.toHours());//两个时间差的小时
        System.out.println(duration.toMinutes());//两个时间差的分钟数
        System.out.println(duration.toMillis());//两个时间差的毫秒数
        System.out.println(duration.toNanos());//两个时间差的纳秒数
        System.out.println(duration.toSeconds());//两个时间差的秒数
    }
}

ChronoUnit类

概念: 计算时间间隔(所有单位)
常用方法:
long between(Temporal 第一个参数, Temporal 第二个参数)        计算参数中的间隔(第二个参数减第一个参数)
使用类名调用对应的常量,再用常量调用between方法
具体方法:
package com.caihongjia2.a01jdk8datedmeo;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class A10ChronoUnitDemo01 {
    public static void main(String[] args) {
        /*
        所有单位
            long between(Temporal 第一个参数, Temporal 第二个参数)        计算参数中的间隔(第二个参数减第一个参数)
            使用类名调用对应的常量,再用常量调用between方法
         */


        //当前日期(年,月,日)
        LocalDateTime today = LocalDateTime.now();
        System.out.println(today);

        //出生日期(年,月,日)
        LocalDateTime birthDate = LocalDateTime.of(2004, 2, 15,0,00,00);
        System.out.println(birthDate);

        System.out.println("相差的年数"+ ChronoUnit.YEARS.between(birthDate,today));
        System.out.println("相差的月数"+ ChronoUnit.MONTHS.between(birthDate,today));
        System.out.println("相差的周数"+ ChronoUnit.WEEKS.between(birthDate,today));
        System.out.println("相差的天数"+ ChronoUnit.DAYS.between(birthDate,today));
        System.out.println("相差的时数"+ ChronoUnit.HOURS.between(birthDate,today));
        System.out.println("相差的分数"+ ChronoUnit.MONTHS.between(birthDate,today));
        System.out.println("相差的秒数"+ ChronoUnit.SECONDS.between(birthDate,today));
        System.out.println("相差的毫秒数"+ ChronoUnit.MILLIS.between(birthDate,today));
        System.out.println("相差的微秒数"+ ChronoUnit.MICROS.between(birthDate,today));
        System.out.println("相差的纳秒数"+ ChronoUnit.NANOS.between(birthDate,today));
        System.out.println("相差的半天数"+ ChronoUnit.HALF_DAYS.between(birthDate,today));
        System.out.println("相差的十年数"+ ChronoUnit.DECADES.between(birthDate,today));
        System.out.println("相差的世纪(百年)数"+ ChronoUnit.CENTURIES.between(birthDate,today));
        System.out.println("相差的千年数"+ ChronoUnit.MILLENNIA.between(birthDate,today));
        System.out.println("相差的纪元数"+ ChronoUnit.ERAS.between(birthDate,today));
    }
}