美文网首页java
27.JDK8开始新增日期API:LocalDate、Local

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

作者: 每天起床都想摆 | 来源:发表于2022-02-06 15:45 被阅读0次

    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、Local

        本文链接:https://www.haomeiwen.com/subject/iuvukrtx.html