Java LocalDate 详细使用教程

在Java 8中引入的LocalDate表示一个格式为yyyy-MM-dd的日期,如2023-07-21
LocalDate 不存时间,只存日期
且LocalDate是不可变的,所有对LocalDate的操作需要重新赋值,例如 localDate = localDate.plusDays(1);

下面给大家介绍一下LocalDate 一些常用的方法

LocalDate初始化

  1. now() 默认当前地区系统时钟
LocalDate n = LocalDate.now();
System.out.println(n);
  1. now(Clock clock) 指定时钟 例如:Clock.systemUTC()
    类似方法有 now(ZoneId zone)
LocalDate n = LocalDate.now(Clock.systemDefaultZone());
System.out.println(n);
//
LocalDate n = LocalDate.now(ZoneId.systemDefault());
System.out.println(n);
  1. of(int year, int month, int dayOfMonth) 指定年月日
LocalDate n = LocalDate.of(2023, 7, 21);
System.out.println(n);
//中间的月份也可以用自带的Month类
LocalDate n = LocalDate.of(2023, Month.JULY, 21);
System.out.println(n);
  1. parse(CharSequence text) 字符串直接转
LocalDate n = LocalDate.of(2023, 7, 21);
System.out.println(n);
//中间的月份也可以用自带的Month类
LocalDate n = LocalDate.of("2023-07-21");
System.out.println(n);
//也可以指定字符串格式
LocalDate n = LocalDate.parse("2023-07-21" , DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(n);
//ps:DateTimeFormatter 提供了自带参数 可以按需取用 如:DateTimeFormatter.ISO_LOCAL_DATE

LocalDate的日期加减

  1. 加n天 论茴的几种写法
        int n = 5;
        LocalDate date = LocalDate.parse("2023-07-21" );
        date = date.plus(n,ChronoUnit.DAYS);
        date = date.plus(Period.ofDays(n));
        date = date.plusDays(n);
  1. 加n周
        int n = 5;
        LocalDate date = LocalDate.parse("2023-07-21" );
        date = date.plus(n,ChronoUnit.WEEKS);
        date = date.plus(Period.ofWeeks(n));
        date = date.plusWeeks(n);

PS:同理 加n月、加n年也对应实现
PS:将上述所有方法的plus 改成 minus 则可实现 减n天 n月 n周n年

LocalDate的日期调整

(懒得写了直接在注释里写)

        LocalDate date = LocalDate.parse("2023-07-21" );
        //调整日期为本周指定周几 如下:日期调整为本周一
        date = date.with(DayOfWeek.MONDAY);
        //修改日期的年份为2024
        date = date.with(ChronoField.YEAR,2024);
        //修改日期的年份为2025
        date = date.withYear(2025);
        //修改日期的月份为8月
        date = date.with(ChronoField.MONTH_OF_YEAR,8);
        //修改日期的月份为9月
        date = date.withMonth(9);
        //修改日期为8号
        date = date.with(ChronoField.DAY_OF_MONTH,8);
        //修改日期为9号
        date = date.withDayOfMonth(9);
        //修改日期为一年的第一天
        date = date.with(ChronoField.DAY_OF_YEAR,1);
        //修改日期为一年的第100天
        date = date.withDayOfYear(100);

PS:综上很多操作都基于ChronoField实现,我们可以通过观察其参数结合with方法对LocalDate进行自定义调整

特殊的日期调整

//获取当月最后一天
n.with(TemporalAdjusters.lastDayOfMonth() 
// 获取下月第一天
n.with(TemporalAdjusters.firstDayOfNextMonth()) 

我们通过with方法中传入TemporalAdjusters的参数 可以实现很多日期的特殊操作 比如当月第一天,下月第一天,明年第一天等…截图如下:
在这里插入图片描述

LocalDate日期中属性的获取

主要依赖get方法
如上with类似通过ChronoField 指定想要获取的值

        LocalDate date = LocalDate.parse("2023-07-21" );
        //获取年份
        System.out.println(date.get(ChronoField.YEAR));
        //获取月份
        System.out.println(date.get(ChronoField.MONTH_OF_YEAR));
        //获取几号
        System.out.println(date.get(ChronoField.DAY_OF_MONTH));
        //获取日期为一年的第几天
        System.out.println(date.get(ChronoField.DAY_OF_YEAR));
        //获取周几
        System.out.println(date.get(ChronoField.DAY_OF_WEEK));

当然LocalDate也提供了直接get的方法

        //获取日期格式
        System.out.println(date.getChronology());
        //获取日期为几号
        System.out.println(date.getDayOfMonth());
        //获取日期为星期几
        System.out.println(date.getDayOfWeek());

当然还有许多其他有趣的属性获取方法,感兴趣的小伙伴可以自行去看

LocalDate 日期差值计算

until方法 ChronoUnit用的好,骚操作少不了

        LocalDate n2 = LocalDate.parse("2023-07-21" );
        LocalDate n = LocalDate.parse("2023-09-21" );
        //计算日期相差天数
        System.out.println(n.until(n2, ChronoUnit.DAYS) );
        //计算日期相差周数
        System.out.println(n.until(n2, ChronoUnit.WEEKS) );
        //计算日期相差月份
        System.out.println(n.until(n2, ChronoUnit.MONTHS) );
        //计算日期相差年份
        System.out.println(n.until(n2, ChronoUnit.YEARS) );

LocalDate日期转换

  1. LocalDate转Date
Date.from(n2.atStartOfDay(ZoneId.systemDefault()).toInstant())
Date.from(d1.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant())
  1. LocalDate转字符串
    DateTimeFormatter 自定义日期格式
        LocalDate n = LocalDate.parse("2023-09-21" );
        System.out.println(n.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
  1. LocalDate转LocalDateTime
    atTime 这里就不细述 直接看
atTime(int hour, int minute)
atTime(int hour, int minute, int second)
atTime(int hour, int minute, int second, int nanoOfSecond)
atTime(LocalTime time) 

LocalDate日期比较

        LocalDate n = LocalDate.parse("2023-09-21" );
        LocalDate n2 = LocalDate.parse("2023-07-21");
        //日期n是否在n2之前
        n.isBefore(n2);
        //日期n是否在n2之后
        n.isAfter(n2);
        //日期n是否等于n2
        n.isEqual(n2);

特殊的日期判断平闰年

n.isLeapYear();//n是否为闰年

还有 isSupported(TemporalUnit unit) 判断单位是否支持 比如LocalDate不支持小时 则为false 一般没啥用

嗯嗯,先写到这里 如果有什么需要补充的在评论区告诉我,希望这篇文章能给到大家帮助

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值