【JAVA8】新时间API操作大全

(1)LocalDate 操作日期值(仅包含年 月 日)信息

public class LocalDateDemo {
    public static void main(String[] args) {
        // 获取现在时间 格式:yyyy-MM-dd ex:2021-08-28
        LocalDate now = LocalDate.now();
        System.out.println(now);

        // 格式化 ex:yyyyMMdd 20210828
        String formatResult = now.format(DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println(formatResult);

        // 对时间进行偏移 可以偏移 周 月 年 天等
        // plusXX 对时间做右偏移 (加时间)
        LocalDate afterDate = now.plusYears(1).plusMonths(1).plusWeeks(1).plusDays(1);
        // 我这里是对当前时间+1年+1月+1周+1天  2022-10-06
        System.out.println(afterDate);

        // minusXX 对时间做左偏移 (减时间)
        // 我这里是对当前时间 -1年-1月  2020-07-28
        LocalDate preDate = now.minusYears(1).minusMonths(1);
        System.out.println(preDate);

        // 从指定年月日中获取时间实例
        LocalDate dateInstance = LocalDate.of(2021, 8, 28);
        // LocalDate 实例 2021-08-28
        System.out.println(dateInstance);


        // 获取年  2021
        System.out.println(dateInstance.getYear());

        // 获取月 AUGUST
        System.out.println(dateInstance.getMonth());

        // 获取月份数值 1就是1月 2就是2月.....
        System.out.println(dateInstance.getMonthValue());

        // 今日是当前时间月的第几天
        System.out.println(dateInstance.getDayOfMonth());

        // 一年中的第几天
        System.out.println(dateInstance.getDayOfYear());

        // 一个月中的第几天
        System.out.println(dateInstance.getDayOfMonth());

        // 礼拜几 ex:SATURDAY 周六
        System.out.println(dateInstance.getDayOfWeek());

        // 礼拜几 数字
        System.out.println(dateInstance.getDayOfWeek().getValue());

        // 一个月中的第几天
        System.out.println(dateInstance.get(ChronoField.DAY_OF_MONTH));

        // 一年中的第几天
        System.out.println(dateInstance.get(ChronoField.DAY_OF_YEAR));

        // 获取某天开始于结束时间戳
        LocalDate startDate = LocalDate.now();
        // +8是北京时间
        Long minTime = LocalDateTime.of(startDate, LocalTime.MIN).toInstant(ZoneOffset.of("+8")).toEpochMilli();
        Long maxTime = LocalDateTime.of(startDate, LocalTime.MAX).toInstant(ZoneOffset.of("+8")).toEpochMilli();
        System.out.println(minTime);
        System.out.println(maxTime);
    }
}

(2)LocalDateTime 操作时间值(详细的时间 包含年月日时分秒)

public class LocalDateTimeDemo {
    public static void main(String[] args) {
        //获取当前时间  2021-08-28T21:02:38.644
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);

        //格式化 20210828
        System.out.println(now.format(DateTimeFormatter.BASIC_ISO_DATE));

        //格式化 2021-08-28 21:02:38
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(now.format(formatter));

        // 时间偏移 我这里是减一天加一月 并格式化 2021-09-27 21:02:38
        System.out.println(now.minusDays(1).plusMonths(1).format(formatter));

        // 获取当前年 月 日 当前年:2021 当前月:8 当前日:28
        System.out.println("当前年:" + now.getYear() + " 当前月:" + now.getMonthValue() + " 当前日:" + now.getDayOfMonth());
        //LocalDate + LocalTime 组合为 LocalDateTime
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        // 2021-08-28 21:02:38
        System.out.println(LocalDateTime.of(localDate, localTime).format(formatter));
    }
}

(3)Duration 求时间差(基于时间值LocalDateTime)

注意between两个参数前后顺序 param1 为开始时间 必须要小于param2 结束时间,如开始时间大于结束时间,那么结果为负数

public class ChronoUnitDemo {
    public static void main(String[] args) {
        LocalDateTime time1 = LocalDateTime.of(2019, 12, 2, 0, 0);
        LocalDateTime time2 = LocalDateTime.now();

        System.out.println("相差秒:" + ChronoUnit.SECONDS.between(time1, time2));

        System.out.println("相差小时:" + ChronoUnit.HOURS.between(time1, time2));

        System.out.println("相差半天:" + ChronoUnit.HALF_DAYS.between(time1, time2));

        System.out.println("相差天:" + ChronoUnit.DAYS.between(time1, time2));

        System.out.println("相差周:" + ChronoUnit.WEEKS.between(time1, time2));

        System.out.println("相差月:" + ChronoUnit.MONTHS.between(time1, time2));

        System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));

        System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));
    }
}
public class DurationDemo {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        // 2021-08-28T21:04:39.961
        System.out.println(now);
        LocalDateTime of = LocalDateTime.of(2020, 9, 28, 9, 5, 25, 720);
        // 2020-09-28T09:05:25.000000720
        System.out.println(of);

        // between(p1,p1) p1为开始时间 p2为结束时间 求值结果是是p2-p1 所以要注意前后顺序,否则结果为负数
        Duration duration = Duration.between(of, now);
        System.out.println(duration);

        //两个时间相差天数: 334天
        System.out.println(duration.toDays());

        //两个时间相差小时: 8028小时
        System.out.println(duration.toHours());

        //两个时间相差分钟: 481680 分钟
        System.out.println(duration.toMinutes());

        //两个时间相差毫秒: 28900809381 毫秒
        System.out.println(duration.toMillis());
    }
}

(4)ChronoUnit 求时间差(基于时间值LocalDateTime)

java8工具 ChronoUnit 求时间差

注意between两个参数前后顺序 param1 为开始时间 必须要小于param2 结束时间,如开始时间大于结束时间,那么结果为负数

public class ChronoUnitDemo {
    public static void main(String[] args) {
        LocalDateTime time1 = LocalDateTime.of(2019, 12, 2, 0, 0);
        LocalDateTime time2 = LocalDateTime.now();

        System.out.println("相差秒:" + ChronoUnit.SECONDS.between(time1, time2));

        System.out.println("相差小时:" + ChronoUnit.HOURS.between(time1, time2));

        System.out.println("相差半天:" + ChronoUnit.HALF_DAYS.between(time1, time2));

        System.out.println("相差天:" + ChronoUnit.DAYS.between(time1, time2));

        System.out.println("相差周:" + ChronoUnit.WEEKS.between(time1, time2));

        System.out.println("相差月:" + ChronoUnit.MONTHS.between(time1, time2));

        System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));

        System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));
    }
}

(5)Period 求时间差(基于日期值 LocalDate)

Period 比较的是两个日期之间相差数据,比如 2020-08-28 与 2021年 08-11 相差多久?

答案是一共相差 0年 10个月 零13天,getXXX即可取得对应相差值

public class PeriodDemo {
    public static void main(String[] args) {
        Period period = Period.between(LocalDate.of(2020, 8, 28),LocalDate.of(2021, 7, 11));
        // 0
        System.out.println(period.getYears());
        // 11
        System.out.println(period.getMonths());
        // 13
        System.out.println(period.getDays());
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值