目录
用法一:获取当前日期的一些信息:
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
对象。
LocalDate.now()
来获取当前日期。LocalDate currentDate = LocalDate.now();//创建一个LocalData对象获取当前日期
System.out.println("当前日期为:"+currentDate);
其输出结果为:
当前日期为:2023-10-11
// 获取当前日期
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
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 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
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
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
// 获取当前日期
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
// 获取当前日期
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():返回指定日期所在年份的最后一天。
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
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
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
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
暂且在开发中就遇到过这些如果后续有有价值的信息就继续补充,如果觉得有用请点个赞,如果有需要也可以点个收藏