更好用的日期工具

介绍

在以往的JAVA开发中,我们只能使用Date作为日期开发的常用工具,但是随着时代的发展,对日期的操作有了更高的需求,Date无法满足,并且使用起来代码比较繁琐,在此情景下,JAVA8引入了新的日期类-LocalDate以及LocalDateTime,新的时间类都是不可变并且线程安全的,下面我们来学一学它的用法。

获取当前时间

public static void main(String[] args) {
    /**
     * 获取当前时间戳
     */
    Instant instant = Instant.now();
    System.out.println(instant);
    /**
     * 获取当前日期
     */
    LocalDate localDate = LocalDate.now();
    System.out.println(localDate);
    /**
     * 获取当前时刻
     */
    LocalTime localTime = LocalTime.now();
    System.out.println(localTime);

    /**
     * 获取当前具体时间
     */
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(localDateTime);

    /**
     * 获取带有时区的时间
     */
    ZonedDateTime zonedDateTime = ZonedDateTime.now();
    System.out.println(zonedDateTime);
}

LocalDate与Date及String的相互转化

public static void main(String[] args) {
        /**
         * 将日期字符串转化为LocalDate
         */
        String str = "2019-11-17";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate localDate = LocalDate.parse(str, formatter);
        System.out.println(localDate);
        /**
         * Date转为LocalDate
         */
        Date date = new Date();
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        localDate = instant.atZone(zoneId).toLocalDate();
        System.out.println(localDate);
        /**
         * LocalDate转成Date
         */
        localDate = LocalDate.now();
        ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
        date = Date.from(zdt.toInstant());
        System.out.println(date);
        /**
         * 时间戳转化为LocalDateTime
         */
        instant = Instant.ofEpochMilli(System.currentTimeMillis());
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        System.out.println(localDateTime);

        /**
         * LocalDateTime转化成时间戳
         */
        LocalDateTime now = LocalDateTime.now();
        long beijing = now.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
        System.out.println(beijing);
        long nowTime = now.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();
        System.out.println(nowTime);
        long normalTime = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        System.out.println(normalTime);
    }

LocalDate和LocalDateTime的常用方法

public static void main(String[] args) {
     /**
      * 设置年月日
      */
     LocalDate date = LocalDate.of(2019, 11, 17);
     /**
      * 设置年月日、时间秒
      */
     LocalDateTime time = LocalDateTime.of(date, LocalTime.of(12, 0, 0));
     /**
      * 获取两个日期间间隔的天数
      */
     LocalDate dateFrom = LocalDate.of(2018, 11, 11);
     LocalDate now = LocalDate.now();
     long between = ChronoUnit.DAYS.between(dateFrom, now);
     /**
      * 判断当前年份是否为闰年
      */
     boolean leapYear = LocalDate.now().isLeapYear();
     /**
      * 当前日期 + 100 天
      */
     LocalDate plusDays = now.plusDays(100);
     /**
      * 当前日期 -100 天
      */
     LocalDate minusDays = now.minusDays(100);
     /**
      * 当前日期 + 3 个月
      */
     LocalDate plusMonths = now.plusMonths(3);
     /**
      * 当前日期 - 3 个月
      */
     LocalDate minusMonths = now.minusMonths(3);
     /**
      * 当前日期 + 1 周
      */
     LocalDate plusWeeks = now.plusWeeks(1);
     /**
      * 当前日期 - 1 周
      */
     LocalDate minusWeeks = now.minusWeeks(1);
     /**
      * 当前日期 + 1年
      */
     LocalDate plusYears = now.plusYears(1);
     /**
      * 当前日期 - 1年
      */
     LocalDate minusYears = now.minusYears(1);
     /**
      * 替换当前日期为本月的第19天
      */
     LocalDate withDayOfMonth = now.withDayOfMonth(19);
     /**
      * 替换日期为本年的第10天
      */
     LocalDate withDayOfYear = now.withDayOfYear(10);
     /**
      * 替换当前月份为10月
      */
     LocalDate withMonth = now.withMonth(10);
     /**
      * 替换当前年份为 2018年
      */
     LocalDate withYear = now.withYear(2018);
     
 }

结束语

更多更好用的,等你来发掘……