Bootstrap

Java8 LocalDateTime的使用

Java 8里面添加了许多的新特性,如LocalDate、LocalTime、LocalDateTime

新增的日期类主要有三种

java.time.LocalDate ->只对年月日做出处理

默认格式:yyyy-MM-dd, 例如:2021-11-29

java.time.LocalTime ->只对时分秒纳秒做出处理

默认格式:HH:mm:ss.SSSSSSSSS 例如:11:23:40.051942200

java.time.LocalDateTime ->同时可以处理年月日和时分秒

默认格式:yyyy-MM-ddTHH:mm:ss.SSSSSSSSS 例如:2021-12-01T11:27:22.598224900

创建LocalDateTime

@Test
public void now(){
    LocalDateTime now = LocalDateTime.now(); // 获取当前时间
    LocalDate now1 = LocalDate.now(); // 获取当前年月日(当前日期)
    LocalTime now2 = LocalTime.now();// 获取当前时分秒(具体时间)
    System.out.println(now);
    System.out.println(now1);
    System.out.println(now2);
}

   @Test
    public void now1(){
        LocalDateTime now = LocalDateTime.now(); // 获取当前时间
        int year = now.getYear(); // 获取年份
        int month = now.getMonthValue(); // 获取月份
        int day = now.getDayOfMonth(); // 获取月中的天数
        int hour = now.getHour(); // 获取当前的小时
        int minute = now.getMinute(); // 获取当前分钟
        int second = now.getSecond(); // 获取当前秒数
        System.out.println(year);
        System.out.println(month);
        System.out.println(day);
        System.out.println(hour);
        System.out.println(minute);
        System.out.println(second);
    }

当前系统时间加上对应的时间

  @Test
    public void now2(){
        LocalDateTime now = LocalDateTime.now(); // 当前时间
        LocalDateTime now1 = now.plusYears(5); // 在当前时间加上5年
        LocalDateTime now2 = now.plusMonths(5);// 在当前时间商加上5月
        LocalDateTime now3 = now.plusDays(7); // 在当前时间加上7天
        LocalDateTime now4 = now.plusHours(2); // 在当前时间加上2个小时
        LocalDateTime now5 = now.plusMinutes(30); // 在当前时间加上30分钟
        LocalDateTime now6 = now.plusSeconds(30); // 在当前时间加上30秒
        System.out.println(now);
        System.out.println(now1);
        System.out.println(now2);
        System.out.println(now3);
        System.out.println(now4);
        System.out.println(now5);
        System.out.println(now6);
    }

当前系统时间减去对应的时间

@Test
public void now3(){
    LocalDateTime now = LocalDateTime.now(); // 当前时间
    LocalDateTime now1 = now.minusYears(5); // 在当前时间减上5年
    LocalDateTime now2 = now.minusMonths(5);// 在当前时间商减上5月
    LocalDateTime now3 = now.minusDays(7); // 在当前时间减上7天
    LocalDateTime now4 = now.minusHours(2); // 在当前时间减上2个小时
    LocalDateTime now5 = now.minusMinutes(30); // 在当前时间减上30分钟
    LocalDateTime now6 = now.minusSeconds(30); // 在当前时间减上30秒
    System.out.println(now);
    System.out.println(now1);
    System.out.println(now2);
    System.out.println(now3);
    System.out.println(now4);
    System.out.println(now5);
    System.out.println(now6);
}

改变当前时间

@Test
public void now4(){
    LocalDateTime now = LocalDateTime.now(); // 当前时间
    LocalDateTime now1 = now.withYear(2060); // 改变当前年份(变成2060年)
    LocalDateTime now2 = now.withMonth(12); // 改变当前月份(变成12月份)
    LocalDateTime now3 = now.withDayOfMonth(29); //改变当前天数(变成29日)
    LocalDateTime now4 = now.withHour(23); // 改变当前小时数(变成23时)
    LocalDateTime now5 = now.withMinute(30); // 改变当前分钟(变成30分钟)
    LocalDateTime now6 = now.withSecond(23); // 改变当前小时数(变成23时)
    LocalDateTime now7 = now.withDayOfYear(60); // 从一月一号开始加上60天
    System.out.println(now);
    System.out.println(now1);
    System.out.println(now2);
    System.out.println(now3);
    System.out.println(now4);
    System.out.println(now5);
    System.out.println(now6);
    System.out.println(now7);
}

 @Test
    public void compareTo(){
        LocalDateTime now = LocalDateTime.now(); // 当前时间
        LocalDateTime now1 = now.plusYears(5); // 在当前时间加上5年
        //  给LocalDateTime 赋值
        LocalDateTime of = LocalDateTime.of(2022,2,5,1,1,1);
        LocalDateTime of1 = LocalDateTime.of(2022,8,5,1,1,1);
        //两个时间作比较,第一个时间减去第二个时间(如果年份相同,比较月份,月份相同比较天数,以此类推)
        int compareTo = now1.compareTo(now);
        int compareTo1 = now.compareTo(now1);
        int compareTo2 = now.compareTo(of);
        int compareTo3 = now.compareTo(of1);
        System.out.println(now);   // 输出 2022-08-13 14:35:52
        System.out.println(now1); // 输出 2027-08-13 14:35:52
        System.out.println(of); // 输出 2022-02-05T01:01:01
        System.out.println(of1); // 输出 2022-08-05T01:01:01
        System.out.println(compareTo); // 输出 5年
        System.out.println(compareTo1); // 输出 -5年
        System.out.println(compareTo2); // 输出 6月
        System.out.println(compareTo3); // 输出 8天
    }

时间相互转换

  @Test
    public void ofPattern() {
        // 字符串转时间
        String dateTime = "2021-01-05 12:00:00";
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime ldt = LocalDateTime.parse(dateTime, df);
        // 时间转字符串
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter of = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String dateTime1 = now.format(of);
        System.out.println(ldt); // 输出 2021-01-05T12:00
        System.out.println(dateTime1); // 输出 2022-08-13 10:15:03
    }

计算对应的时间差

// 方式一
@Test
public void duration(){
    LocalDateTime now = LocalDateTime.now(); // 当前时间
    //  给LocalDateTime 赋值
    LocalDateTime of = LocalDateTime.of(2022,7,13,1,1,1);
    Duration duration = Duration.between(of,now); // 后面减去前面
    long days = duration.toDays(); //相差的天数
    long hours = duration.toHours();//相差的小时数
    long minutes = duration.toMinutes();//相差的分钟数
    long millis = duration.toMillis();//相差毫秒数
    long nanos = duration.toNanos();//相差的纳秒数
    System.out.println(days); // 输出 31
    System.out.println(hours); // 输出 752
    System.out.println(minutes); // 输出 45179
    System.out.println(millis); // 输出 2710769393
    System.out.println(nanos); // 输出 2710863444800000
}

// 方式二
	Date currentTime = new Date();
	// 查看系统时区 timedatectl | grep "Time zone"
	ZoneId zoneId = ZoneId.systemDefault();
	// 从一个 Instant和区域ID获得 LocalDateTime实例
	LocalDateTime localDateTime = LocalDateTime.ofInstant(currentTime.toInstant(), zoneId);
	// 获取次日24点时刻的实例
	LocalDateTime tomorrowTime = LocalDateTime.ofInstant(currentTime.toInstant(), zoneId)
	        .plusDays(1).withHour(23).withMinute(59).withSecond(59).withNano(999);
	// ChronoUnit 日期枚举类,between方法计算两个时间对象之间的时间量
	long seconds = ChronoUnit.SECONDS.between(localDateTime, tomorrowTime);
	System.out.println(seconds);
	long minutes = ChronoUnit.MINUTES.between(localDateTime, tomorrowTime);
	System.out.println(minutes);
	long hours = ChronoUnit.HOURS.between(localDateTime, tomorrowTime);
	System.out.println(hours);

;