27.JDK8开始新增日期API:LocalDate、LocalTime、LocalDateTime

JDK8开始新增日期API

概述

  • 从Java8开始,java.time包提供了新的日期和时间API,主要涉及的类型有
    • LocalDate:不包含具体时间的日期
    • LocalTime:不含日期的时间
    • LocalDateTime:包含了日期及时间
    • Instant:代表的是时间戳
    • DateTimeFormatter:用于做时间的格式化和解析的
    • Duration:用于计算两个“时间”间隔
    • Period:用于计算两个“日期”间隔
  • 新增的API严格区分了时刻,本地日期,本地时间,并且,对日期和时间进行运算更加方便
  • 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改

LocalTime/LocalDate/LocalDateTime ' API

  • 他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象
  • 他们三者构建对象和API都是通用的


  • 构建对象的方式

    方法名 说明 例子
    public static Xxxx now(); 静态方法,根据当前时间创建对象 LocalDate localdate = LocalDate.now();
    LocalTime localtime = LocalTime.now();
    LocalDateTime localdatetime = LocalDateTime.now();
    public static Xxxx of(...) 静态方法,指定日期/时间创建对象 LocalDate localdate1 = LocalDate.now(2000,12,16);
    LocalTime localtime1 = LocalTime.now(11,11,11);
    LocalDateTime localdatetime1
    =
    LocalDateTime.now(2000,12,16,20,23,57);
  • 获取信息的API

    方法名 说明
    public int getYear(); 获取年
    public int getMonthValue(); 获取月份(1-12)
    public int getDayOfMonth(); 获取月中第几天
    public int getDayOfYear(); 获取年中第几天
    public DayOfWeek getDayOfWeek() 获取星期
  • LocalDateTime的转换API

    方法名 说明
    public LocalDate toLocalDate() 转换成一个LocalDate对象
    public LocalTime toLocalTime() 转换成一个LocalTime对象
  • 修改相关API

    方法名 说明
    plusDays,plusWeeks,plusMonths,plusYears 向当前LocalDate对象添加几天/周/月/年
    minusDays,minusWeeks,minusMonths,minusYears 从当前对象减去几天/周/月/年
    withDayOfMonth,withDayOfYear,withMonth,withYear 将月份天数,年份天数,月份,年份修改为指定的值
    并返回新的LocalDate对象
    isBefore,isAfter 比较两个LocalDate

    LocalDateTime综合了LocalDate和LocalTime里面的方法,测试用例仅用LocalDate和LcoalTime测试

    这些方法返回的是一个新的实例引用,因为LocalDateTime,LocalDate,LocalTime都是不可变的

LocalDate测试代码

package com.java.jdk8time_update;

import java.time.LocalDate;
import java.time.Month;

/**
 * LocalDate测试案例
 */
public class LocalDateTest {
    public static void main(String[] args) {
        // 获取本地日期对象
        LocalDate nowDate = LocalDate.now();    // 出现的日期,说明重写了toString()
        System.out.println("今天的日期" + nowDate);

        int year = nowDate.getYear();

        int month = nowDate.getMonthValue();

        int day = nowDate.getDayOfMonth();

        System.out.println(year + "年" + month + "月" + day + "日");

        int dayOfYear = nowDate.getDayOfYear();
        System.out.println("一年中的第" + dayOfYear + "天");

        //DayOfWeek返回值类型是DayOfWeek,因此调用getValue()获取值为int类型方便使用int类型变量接收
        int dayOfWeek = nowDate.getDayOfWeek().getValue();
        System.out.println("一周的第" + dayOfWeek + "天");

        int intMonth = nowDate.getMonth().getValue();
        System.out.println("月份:" + nowDate.getMonth()); //直接调用默认英文显示
        System.out.println("月份:" + intMonth);

        System.out.println("---------------------------------------------");
        LocalDate bt = LocalDate.of(1949, 10, 1);
        System.out.println("打印指定日期:" + bt);
        // Month.NOVEMBER使用枚举的方式输出指定日期
        System.out.println("枚举方式指定日期:" + LocalDate.of(1949, Month.NOVEMBER, 11));


    }
}

LocalTime测试代码

package com.java.jdk8time_update;

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

/**
 * LocalTime测试案例
 */
public class LocalTimeTest {
    public static void main(String[] args) {
        LocalTime nowTime = LocalTime.now();
        System.out.println("今天的时间:" + nowTime);

        int hours = nowTime.getHour();
        int minutes = nowTime.getMinute();
        int seconds = nowTime.getSecond();
        int nanos = nowTime.getNano();
        System.out.println("今天的时间【格式:时/分/秒/纳秒】:");
        System.out.println(hours + "/" + minutes + "/" + seconds + "/" + nanos);

        System.out.println("------------------------指定时间------------------------");
        System.out.println(LocalTime.of(8,20));
        System.out.println(LocalTime.of(8,20,30));
        System.out.println(LocalTime.of(8,20,30,150));
        LocalTime time = LocalTime.of(8,20,30,150);
        System.out.println(time);

        System.out.println("------------------------指定年月日时刻-------------------");
        System.out.println(LocalDateTime.of(1991, 12, 16, 8, 31, 23, 143));


    }
}

LocalDateTime测试代码

package com.java.jdk8time_update;

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

/**
 * LocalDateTime测试案例
 * 兼容了LocalDate & LocalTime所有的API
 */
public class LocalDateTimeTest {
    public static void main(String[] args) {
        LocalDateTime nowDateTime = LocalDateTime.now();
        System.out.println("今日时间:" + nowDateTime);
        System.out.println("年:" + nowDateTime.getYear());
        System.out.println("月:" + nowDateTime.getMonthValue());
        System.out.println("日:" + nowDateTime.getDayOfMonth());
        System.out.println("时:" + nowDateTime.getHour());
        System.out.println("分:" + nowDateTime.getMinute());
        System.out.println("秒:" + nowDateTime.getSecond());
        System.out.println("纳秒:" + nowDateTime.getNano());

        System.out.println("当年第几天:" + nowDateTime.getDayOfYear());
        System.out.println("当月第几天:" + nowDateTime.getDayOfMonth());
        System.out.println("当周第几天:" + nowDateTime.getDayOfWeek().getValue());
        System.out.println("星期几:" + nowDateTime.getDayOfWeek());
        System.out.println("几月份:" + nowDateTime.getMonthValue());
        System.out.println("几月份:" + nowDateTime.getMonth());

        // 转换对象
        LocalDate ld = nowDateTime.toLocalDate();
        System.out.println(ld);
        System.out.println(ld.getDayOfYear());

        LocalTime lt = nowDateTime.toLocalTime();
        System.out.println(lt);
        System.out.println(lt.getHour());

    }
}

日期时间修改测试代码

package com.java.jdk8time_update;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.MonthDay;

/**
 * 对日期进行修改
 */
public class UpdateTimeTest {
    public static void main(String[] args) {
        LocalTime nowTime = LocalTime.now();
        System.out.println(nowTime);
        // 以小时增减操作为例
        System.out.println(nowTime.plusHours(1));
        System.out.println(nowTime.minusHours(2));
        //LocalTime为不可变对象,每次操作都会产生新的对象,原对象的信息并没有发生变化
        System.out.println(nowTime);


        LocalDate date1 = LocalDate.of(2022, 2, 6);
        LocalDate date2 = LocalDate.now();
        System.out.println("两个日期相同吗:" + date1.equals(date2));
        System.out.println("data1 before data2:" + date1.isBefore(date2));
        System.out.println("data1 after data2:" + date1.isAfter(date2));

        // MonthDay :月日对象
        MonthDay d1 = MonthDay.of(date1.getMonthValue(), date1.getDayOfMonth()); //获取月日
        MonthDay d2 = MonthDay.from(date2); //获取今天的日期

        System.out.println("d1 == d2 时触发某事件:" + d1.equals(d2));
    }
}

你可能感兴趣的:(27.JDK8开始新增日期API:LocalDate、LocalTime、LocalDateTime)