目录
用法一:获取当前日期的一些信息:
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-11System.out.println("今天是星期 " + dayOfWeekValue); //今天是星期 3System.out.println("星期几: " + dayOfWeek);//星期几: WEDNESDAYSystem.out.println("日期在年份中的第几天: " + dayOfYear);//日期在年份中的第几天: 284System.out.println("是否为闰年: " + isLeapYear); //是否为闰年: falseSystem.out.println("当前月份的天数: " + daysInMonth);//当前月份的天数: 31System.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-11System.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-11System.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-09System.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-01System.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
方法及其功能:
firstDayOfMonth():返回指定日期所在月份的第一天。
lastDayOfMonth():返回指定日期所在月份的最后一天。
firstDayOfNextMonth():返回指定日期下个月的第一天。
firstDayOfNextYear():返回指定日期下一年的第一天。
next(DayOfWeek dayOfWeek):返回指定日期之后的下一个星期几。例如,
next(DayOfWeek.MONDAY)
返回下一个星期一。previous(DayOfWeek dayOfWeek):返回指定日期之前的上一个星期几。
nextOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回下一个指定星期几。
previousOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回上一个指定星期几。
firstInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的第一个指定星期几。
lastInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的最后一个指定星期几。
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek):返回指定日期所在月份的第
ordinal
个指定星期几。例如,dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY)
返回指定日期所在月份的第二个星期三。firstDayOfYear():返回指定日期所在年份的第一天。
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); // 返回 trueboolean 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); // 返回 trueboolean 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); // 返回-5int result2 = date2.compareTo(date1); // 返回5
暂且在开发中就遇到过这些如果后续有有价值的信息就继续补充,如果觉得有用请点个赞,如果有需要也可以点个收藏