在Java 8中引入的LocalDate表示一个格式为yyyy-MM-dd的日期,如2023-07-21
LocalDate 不存时间,只存日期
且LocalDate是不可变的,所有对LocalDate的操作需要重新赋值,例如 localDate = localDate.plusDays(1);
下面给大家介绍一下LocalDate 一些常用的方法
文章目录
LocalDate初始化
- now() 默认当前地区系统时钟
LocalDate n = LocalDate.now();
System.out.println(n);
- 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);
- 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);
- 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的日期加减
- 加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);
- 加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日期转换
- LocalDate转Date
Date.from(n2.atStartOfDay(ZoneId.systemDefault()).toInstant())
Date.from(d1.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant())
- LocalDate转字符串
DateTimeFormatter 自定义日期格式
LocalDate n = LocalDate.parse("2023-09-21" );
System.out.println(n.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
- 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 一般没啥用
结
嗯嗯,先写到这里 如果有什么需要补充的在评论区告诉我,希望这篇文章能给到大家帮助