Java 8常用日期时间操作

旧的 Java 日期 API 也就是 Java 8 之前的日期 API 之烂是公认的。一方面在于它设计分工上不明确,往往一个类既能处理日期又能处理时间,很混乱;另一方面,在某些年月日期的数值映射存储违反人们的正常认知,如 0 对应月份一月、11 对应月份十二月等,Java 8进行了优化,常用的例子如下。

  1. 常用
        //获取当前时间并格式化
        DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("当前时间: "+format.format(LocalDateTime.now()));
        //DateTimeFormatter提供了一些默认的格式化器,DateTimeFormatter.ISO_LOCAL_DATE_TIME 格式 yyyy-MM-ddTHH:mm:ss.SSS
        String dateTime = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        System.out.println("当前时间:"+dateTime);
        // 是否是生日
        MonthDay monthDay = MonthDay.parse("--05-18");
        MonthDay monthDay1 = MonthDay.from(LocalDate.now());
        System.out.println(monthDay.getMonthValue());
        if (monthDay.equals(monthDay1))
        {
            System.out.println("今天是生日");
        }else {
            System.out.println("今天不是生日");
        }

        //判断是否闰年
        YearMonth yearMonth = YearMonth.from(LocalDate.now());
        yearMonth.isLeapYear();

        //信用卡过期,只有年月信息
        YearMonth creditCardExpiry = YearMonth.of(2019, Month.FEBRUARY);
        System.out.printf("信用卡过期时间:", creditCardExpiry.toString());
  1. 计算下一个工作日的日期
        // 计算下一个工作日的日期
        TemporalAdjuster nextWorkDay = TemporalAdjusters.ofDateAdjuster(
                tdate->{
                    DayOfWeek work = tdate.getDayOfWeek();
                    int addDays=0;
                    if (work.equals(DayOfWeek.FRIDAY)) {
                        addDays=3;
                    }else if(work.equals(DayOfWeek.SATURDAY)){
                        addDays=2;
                    }else {
                        addDays=1;
                    }
                    return tdate.plusDays(addDays);
                }
        );

        LocalDate localDate1 = LocalDate.now().with(nextWorkDay);
        System.out.println(localDate1);
  1. 特殊日期
        LocalDate localDate = LocalDate.now();
        //计算下一个月的第一天的日期
        System.out.println("下一个月的第一天的日期: "+localDate.plusMonths(1).with(TemporalAdjusters.firstDayOfMonth()));


        LocalDateTime dateTime = LocalDateTime.now();
        //计算一年前的第二个月的最后一天的日期
        dateTime = dateTime.minusYears(1) // 一年前
                .withMonth(2) // 设置为2月
                .with(TemporalAdjusters.lastDayOfMonth());  // 一个月中的最后一天
        System.out.println("一年前的第二个月的最后一天的日期"+dateTime);

        //当月最后一个满足是星期四的日期
        LocalDate date = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY));
        System.out.println("当月最后一个满足是星期四的日期:"+date);

        //当前日期的前一个星期天,如果当天就是星期天
        LocalDate dateTwo = localDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
        System.out.print("当前日期的前一个星期天:"+dateTwo);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值