LocalDate类:JAVA中的日期详解

目录

用法一:获取当前日期的一些信息:

1.获取当前日期

2.获取当前的年份、月份、天等基础信息

3.获取星期几,获取日期在年份中的第几天,获取日期所在月份的天数,获取日期所在年份的天数以及检查日期所在年份是否为闰年

用法二:创建特定的日期

用法三:LocalDate的日期运算(增加或者减少指定年月日周)

1.增加或减少指定年数。

2.增加或减少指定月数。

3.增加或减少指定周数。

4.增加或减少指定天数。

5.除了对年月周日单独操作外,我们还可以进行统一的操作,比如增加一年零三个月(plus为增,minus为减)

用法四:获取当前时间所在周,月等信息的特定时间

1.获取当前时间所在周的第一天以及最后一天:

2.获取当前时间所在月的第一天以及最后一天:

3.获取当前时间所在周是本年以及本月第几周

 关于TemporalAdjusters的一些简介

用法五:日期的比较:

1. equals() 方法

2.isBefore() 方法

3.isAfter() 方法

4.compareTo() 方法


java.time.LocalDate是Java 8引入的日期类之一,位于java.time包中,它提供了一种简单的方式来表示日期,不包括时间和时区信息。下面我门来解释一下他的各种用法。

用法一:获取当前日期的一些信息:

LocalDate表示一个年份、月份和日期的日期,其一般形式为:yyyy-MM-dd。例如:2023-10-11。LocalDate在JAVA中由final修饰,是不可变的,一旦创建,就不能更改它的值。如果需要修改日期,可以创建一个新的LocalDate对象。

1.获取当前日期:可以使用LocalDate.now()来获取当前日期。

LocalDate currentDate = LocalDate.now();//创建一个LocalData对象获取当前日期
System.out.println("当前日期为:"+currentDate);

其输出结果为:

当前日期为:2023-10-11

2.除了获取整个日期以外,还可以获取当前的年份、月份、天等基础信息

// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取年份
int year = currentDate.getYear();
// 获取月份
Month month = currentDate.getMonth();
// 获取日
int day = currentDate.getDayOfMonth();
System.out.println("年份: " + year);
System.out.println("月份: " + month);
System.out.println("日: " + day);

其输出结果为:(如果想要获取以int形式的月份可以使用:int monthValue = currentDate.getMonthValue();)

年份: 2023
月份: OCTOBER
日: 11 

3.获取星期几,获取日期在年份中的第几天,获取日期所在月份的天数,获取日期所在年份的天数以及检查日期所在年份是否为闰年

LocalDate currentDate = LocalDate.now();
// 获取星期几枚举值
DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
// 获取日期在年份中的第几天
int dayOfYear = currentDate.getDayOfYear();
// 检查日期所在年份是否为闰年
boolean isLeapYear = currentDate.isLeapYear();
// 获取日期所在月份的天数
int daysInMonth = currentDate.lengthOfMonth();
// 获取日期所在年份的天数
int daysInYear = currentDate.lengthOfYear();
// 获取星期几的整数值
int dayOfWeekValue = currentDate.getDayOfWeek().getValue();
System.out.println("当前日期: " + currentDate);             //当前日期: 2023-10-11
System.out.println("今天是星期 " + dayOfWeekValue);         //今天是星期 3
System.out.println("星期几: " + dayOfWeek);                //星期几: WEDNESDAY
System.out.println("日期在年份中的第几天: " + dayOfYear);    //日期在年份中的第几天: 284
System.out.println("是否为闰年: " + isLeapYear);           //是否为闰年: false
System.out.println("当前月份的天数: " + daysInMonth);      //当前月份的天数: 31
System.out.println("当前年份的天数: " + daysInYear);       //当前年份的天数: 365

用法二:创建特定的日期: LocalDate.of、LocalDate.parse

可以使用LocalDate.of(year, month, day)来创建一个特定的日期对象

LocalDate currentDate1 = LocalDate.of(2023,10,22);
System.out.println("当前日期为:"+currentDate1);

其输出结果为:

当前日期为:2023-10-22

除了使用 LocalDate.of来创造一个特定的日期对象外,我们还可以将一个格式标准的String对象转化为LocalData对象:LocalDate.parse LocalDate.parse用于将字符串表示的日期解析为 LocalDate 对象。它允许你将字符串日期按照指定的日期格式转换为日期对象,以便后续操作或显示。

//创建一个字符串日期
String stringdata="2023-01-06";
//格式化日期规则
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//将字符串日期按照规则转化为LocalData对象
LocalDate stringcurrentDate1= LocalDate.parse(stringdata,formatter);
System.out.println("当前日期为:"+stringcurrentDate1);

其输出结果为:(需要注意的是:你规定的日期格式应为:yyyy-MM-dd,你不可以写2023-1-06,否则会抛出:java.time.format.DateTimeParseException:异常

当前日期为:2023-01-06

 将字符串日期转化为LocalData对象的场景多用于读取文件中的日期,在做业务的时候经常会从Excel、Word或者图像识别的发票等等数据中读取到日期,有的时候这些日期可不会是规范的形式,那么该如何解决?假如说现在传递的日期就是:2023-1-6,我们怎么转化为LocalData对象呢?答案还是使用我们的DateTimeFormatter formatter,格式化日期,只需要将值设为yyyy-M-d即可读取,并且如果需要的话还可以补零。

// 原始日期字符串
String originalDate = "2023-1-1";
// 将日期字符串解析为 LocalDate 对象
LocalDate date = LocalDate.parse(originalDate, DateTimeFormatter.ofPattern("yyyy-M-d"));
System.out.println("格式化前的日期:" + originalDate);
// 使用 DateTimeFormatter 格式化日期,指定月份和日期部分的宽度为两位
String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("格式化后的日期:" + formattedDate);

其输出结果为:

格式化前的日期:2023-1-1
格式化后的日期:2023-01-01

用法三:LocalDate的日期运算(增加或者减少指定年月日周)

1.plusYears(long years), minusYears(long years):增加或减少指定年数。

LocalDate date = LocalDate.now();
LocalDate futureDate = date.plusYears(2); // 增加2年
LocalDate pastDate = date.minusYears(1); // 减少1年
System.out.println("增加后的年数:"+futureDate);//增加后的年数:2025-10-11
System.out.println("减少后的年数:"+pastDate);//减少后的年数:2022-10-11

2.plusMonths(long months), minusMonths(long months):增加或减少指定月数。

3.plusWeeks(long weeks), minusWeeks(long weeks):增加或减少指定周数。

4.plusDays(long days), minusDays(long days):增加或减少指定天数。(函数形式一样,所以月周天不做代码展示了)

5.除了对年月周日单独操作外,我们还可以进行统一的操作,比如增加一年零三个月(plus为增,minus为减)

LocalDate date = LocalDate.now();
LocalDate futureDate = date.plus(Period.of(1, 2, 0)); // 增加1年3个月
System.out.println("当 前 日 期:"+date);       //当 前 日 期:2023-10-11
System.out.println("增加后的日期:"+futureDate);//增加后的日期:2024-12-11

用法四:获取当前时间所在周,月等信息的特定时间

1.获取当前时间所在周的第一天以及最后一天:

LocalDate currentDate = LocalDate.now();
// 获取当前周的第一天(星期一)
LocalDate firstDayOfWeek = currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 获取当前周的最后一天(星期日)
LocalDate lastDayOfWeek = currentDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println("本周第一天: " + firstDayOfWeek); //本周第一天: 2023-10-09
System.out.println("本周最后一天: " + lastDayOfWeek);//本周最后一天: 2023-10-15

2.获取当前时间所在月的第一天以及最后一天:

// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取当前月的第一天
LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth());
// 获取当前月的最后一天
LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("本月第一天: " + firstDayOfMonth); //本月第一天: 2023-10-01
System.out.println("本月最后一天: " + lastDayOfMonth);//本月最后一天: 2023-10-31

3.获取当前时间所在周是本年以及本月第几周

// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取 WeekFields 对象,指定周的起始日为星期一
//4 指定了星期四作为一年中的第一天。这影响了一年中的第一周是如何定义的。在这种定义下,一年中的第一周将包含星期四
// 因此星期四所在的周将被视为第一周,直到下一年的星期四。
WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY,4);
// 获取当前日期所在周是本月的第几周
int weekOfMonth = currentDate.get(weekFields.weekOfMonth());
// 获取当前日期所在周是本年的第几周
int weekOfYear = currentDate.get(weekFields.weekOfWeekBasedYear());
System.out.println("当前日期所在周是本月的第 " + weekOfMonth + " 周");
System.out.println("当前日期所在周是本年的第 " + weekOfYear + " 周");

 关于TemporalAdjusters的一些简介

TemporalAdjusters 是 Java 8 中的一个实用工具类,它提供了一些内置的、用于日期时间调整的工具方法。这些方法允许你进行复杂的日期时间调整操作,如获取某月的第一天、获取下一个星期一、获取年底最后一天等。TemporalAdjusters 中的方法返回 TemporalAdjuster 对象,这是一个函数式接口,用于在 java.time 框架中进行日期时间的调整。

以下是一些常见的 TemporalAdjusters 方法及其功能:

  1. firstDayOfMonth():返回指定日期所在月份的第一天。

  2. lastDayOfMonth():返回指定日期所在月份的最后一天。

  3. firstDayOfNextMonth():返回指定日期下个月的第一天。

  4. firstDayOfNextYear():返回指定日期下一年的第一天。

  5. next(DayOfWeek dayOfWeek):返回指定日期之后的下一个星期几。例如,next(DayOfWeek.MONDAY) 返回下一个星期一。

  6. previous(DayOfWeek dayOfWeek):返回指定日期之前的上一个星期几。

  7. nextOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回下一个指定星期几。

  8. previousOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回上一个指定星期几。

  9. firstInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的第一个指定星期几。

  10. lastInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的最后一个指定星期几。

  11. dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek):返回指定日期所在月份的第 ordinal 个指定星期几。例如,dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY) 返回指定日期所在月份的第二个星期三。

  12. firstDayOfYear():返回指定日期所在年份的第一天。

  13. lastDayOfYear():返回指定日期所在年份的最后一天。

用法五:日期的比较:

1. equals() 方法equals() 方法用于检查两个 LocalDate 对象是否表示相同的日期。如果两个对象表示相同的日期,equals() 方法将返回 true,否则返回 false

LocalDate date1 = LocalDate.of(2023, 5, 15);
LocalDate date2 = LocalDate.of(2023, 5, 15);
LocalDate date3 = LocalDate.of(2023, 5, 16);
boolean areEqual  = date1.equals(date2); // 返回 true
boolean areEqual2 = date1.equals(date3); // 返回 false

2.isBefore() 方法isBefore() 方法用于检查一个 LocalDate 是否在另一个 LocalDate 之前。如果第一个日期在第二个日期之前,该方法返回 true,否则返回 false

LocalDate date1 = LocalDate.of(2023, 5, 15);
LocalDate date2 = LocalDate.of(2023, 5, 20);
boolean isBefore  = date1.isBefore(date2); // 返回 true
boolean isBefore2 = date2.isBefore(date1); // 返回 false

3.isAfter() 方法isAfter() 方法用于检查一个 LocalDate 是否在另一个 LocalDate 之后。如果第一个日期在第二个日期之后,该方法返回 true,否则返回 false

LocalDate date1 = LocalDate.of(2023, 5, 15);
LocalDate date2 = LocalDate.of(2023, 5, 10);
boolean isAfter = date1.isAfter(date2); // 返回 true

4.compareTo() 方法compareTo() 方法用于将两个 LocalDate 对象进行比较,并返回一个整数值。如果第一个日期在第二个日期之前,返回负数;如果两个日期相同,返回零;如果第一个日期在第二个日期之后,返回正数。

LocalDate date1 = LocalDate.of(2023, 5, 15);
LocalDate date2 = LocalDate.of(2023, 5, 20);
int result = date1.compareTo(date2); // 返回-5
int result2 = date2.compareTo(date1); // 返回5

暂且在开发中就遇到过这些如果后续有有价值的信息就继续补充,如果觉得有用请点个赞,如果有需要也可以点个收藏

你可能感兴趣的:(JAVA,java,开发语言)