• Java 8 新的日期时间 API


    1、LocalDate 使用示例

    LocalDate localDate = LocalDate.now();// 获取当前年月日
    LocalDate localDate1 = LocalDate.of(2019, 9, 10);// 构造指定的年月日
    System.out.println("localDate: " + localDate + "  localDate1: " + localDate1);
    
    int year = localDate.getYear();
    int year1 = localDate.get(ChronoField.YEAR);
    System.out.println("year: " + year + "  year1: " + year1);
    
    Month month = localDate.getMonth();
    int month1 = localDate.get(ChronoField.MONTH_OF_YEAR);
    System.out.println("month: " + month + "  month1: " + month1);
    
    int day = localDate.getDayOfMonth();
    int day1 = localDate.get(ChronoField.DAY_OF_MONTH);
    System.out.println("day: " + day + "  day1: " + day1);
    
    DayOfWeek dayOfWeek = localDate.getDayOfWeek();
    int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK);
    System.out.println("dayOfWeek: " + dayOfWeek + "  dayOfWeek1: " + dayOfWeek1);

    运行结果

    localDate: 2019-11-21  localDate1: 2019-09-10
    year: 2019  year1: 2019
    month: NOVEMBER  month1: 11
    day: 21  day1: 21
    dayOfWeek: THURSDAY  dayOfWeek1: 4

    2、LocalTime 使用示例

    // 创建LocalTime
    LocalTime localTime = LocalTime.now();
    LocalTime localTime1 = LocalTime.of(13, 51, 10);
    System.out.println("localTime: " + localTime + " localTime1: " + localTime1);
    // 获取小时
    int hour = localTime.getHour();
    int hour1 = localTime.get(ChronoField.HOUR_OF_DAY);
    System.out.println("hour: " + hour + " hour1: " + hour1);
    // 获取分
    int minute = localTime.getMinute();
    int minute1 = localTime.get(ChronoField.MINUTE_OF_HOUR);
    System.out.println("minute: " + minute + " minute1: " + minute1);
    // 获取秒
    int second = localTime.getSecond();
    int second1 = localTime.get(ChronoField.SECOND_OF_MINUTE);
    System.out.println("second: " + second + " second1: " + second1);

    运行结果

    localTime: 10:06:26.892 localTime1: 13:51:10
    hour: 10 hour1: 10
    minute: 6 minute1: 6
    second: 26 second1: 26

    3、LocalDateTime 使用示例

    // 创建LocalDateTime
    LocalDate localDate = LocalDate.now();
    System.out.println("localDate: " + localDate);
    
    LocalTime localTime = LocalTime.now();
    System.out.println("localTime: " + localTime);
    
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println("localDateTime: " + localDateTime);
    
    LocalDateTime localDateTime1 = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
    System.out.println("localDateTime1: " + localDateTime1);
    
    LocalDateTime localDateTime2 = LocalDateTime.of(localDate, localTime);
    System.out.println("localDateTime2: " + localDateTime2);
    
    LocalDateTime localDateTime3 = localDate.atTime(localTime);
    System.out.println("localDateTime3: " + localDateTime3);
    
    LocalDateTime localDateTime4 = localTime.atDate(localDate);
    System.out.println("localDateTime4: " + localDateTime4);
    
    // 获取LocalDate
    LocalDate localDate2 = localDateTime.toLocalDate();
    System.out.println("localDate2: " + localDate2);
    
    // 获取LocalTime
    LocalTime localTime2 = localDateTime.toLocalTime();
    System.out.println("localTime2: " + localTime2);

    运行结果

    localDate: 2019-11-21
    localTime: 10:07:14.198
    localDateTime: 2019-11-21T10:07:14.198
    localDateTime1: 2019-09-10T14:46:56
    localDateTime2: 2019-11-21T10:07:14.198
    localDateTime3: 2019-11-21T10:07:14.198
    localDateTime4: 2019-11-21T10:07:14.198
    localDate2: 2019-11-21
    localTime2: 10:07:14.198

    4、Instant 使用示例

    // 创建Instant对象
    Instant instant = Instant.now();
    // 获取秒数
    long currentSecond = instant.getEpochSecond();
    System.out.println(currentSecond);
    // 获取毫秒数
    long currentMilli = instant.toEpochMilli();
    System.out.println(currentMilli);

    运行结果

    1574302070
    1574302070013

    5、 使用示例

    LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
    System.out.println("localDateTime: " + localDateTime);
    // 增加一年
    localDateTime = localDateTime.plusYears(1);
    System.out.println("localDateTime: " + localDateTime);
    
    localDateTime = localDateTime.plus(1, ChronoUnit.YEARS);
    System.out.println("localDateTime: " + localDateTime);
    
    // 减少一个月
    localDateTime = localDateTime.minusMonths(1);
    System.out.println("localDateTime: " + localDateTime);
    
    localDateTime = localDateTime.minus(1, ChronoUnit.MONTHS);
    System.out.println("localDateTime: " + localDateTime);
    
    // 修改年为2019
    localDateTime = localDateTime.withYear(2020);
    System.out.println("localDateTime: " + localDateTime);
    
    // 修改为2022
    localDateTime = localDateTime.with(ChronoField.YEAR, 2022);
    System.out.println("localDateTime: " + localDateTime);

    运行结果

    localDateTime: 2019-09-10T14:46:56
    localDateTime: 2020-09-10T14:46:56
    localDateTime: 2021-09-10T14:46:56
    localDateTime: 2021-08-10T14:46:56
    localDateTime: 2021-07-10T14:46:56
    localDateTime: 2020-07-10T14:46:56
    localDateTime: 2022-07-10T14:46:56

    6、结合spring-boot使用

        // @JsonSerialize(using = DateConverter.class)
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
        private Date updateTime;

    转换类

    package com.hao.util;
    
    import java.io.IOException;
    import java.time.LocalDateTime;
    import java.time.ZoneOffset;
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
    
    public class LocalDateTimeConverter extends JsonSerializer<LocalDateTime> {
    
        @Override
        public void serialize(LocalDateTime ldt, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            gen.writeNumber(ldt.toInstant(ZoneOffset.of("+8")).toEpochMilli());
        }
    }

    总结:
    1、DateTimeFormatter默认提供了多种格式化方式,如果默认提供的不能满足要求,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式
    2、和SimpleDateFormat相比,DateTimeFormatter是线程安全的
    3、Date有的方法,LocalDateTime都有,而且更全面,更休息,推荐使用

  • 相关阅读:
    effective C++ 条款 18:让接口容易被正确使用,不易被误用
    effective C++ 条款 24:若所有参数皆需类型转换,请为此采用nonmember函数
    PHP 归并排序
    IOS+H5页面自定义按钮无效
    vscode安装
    php 单例模式
    Warning: popen() has been disabled for security reasons in OS/Guess.php on line 241
    php 魔术方法
    php快速排序
    mysql 查询字段为空显示默认值
  • 原文地址:https://www.cnblogs.com/zhanh247/p/11903897.html
Copyright © 2020-2023  润新知