LocalDate表示一个年份、月份和日期的日期,其一般形式为:yyyy-MM-dd。例如:2023-10-11。LocalDate在JAVA中由final修饰,是不可变的,一旦创建,就不能更改它的值。如果需要修改日期,可以创建一个新的LocalDate对象。
LocalDatecurrentDate=LocalDate.now();//创建一个LocalData对象获取当前日期System.out.println("当前日期为:"+currentDate);其输出结果为:
当前日期为:2023-10-11
//获取当前日期LocalDatecurrentDate=LocalDate.now();//获取年份intyear=currentDate.getYear();//获取月份Monthmonth=currentDate.getMonth();//获取日intday=currentDate.getDayOfMonth();System.out.println("年份:"+year);System.out.println("月份:"+month);System.out.println("日:"+day);其输出结果为:(如果想要获取以int形式的月份可以使用:intmonthValue=currentDate.getMonthValue();)
年份:2023月份:OCTOBER日:11
LocalDatecurrentDate=LocalDate.now();//获取星期几枚举值DayOfWeekdayOfWeek=currentDate.getDayOfWeek();//获取日期在年份中的第几天intdayOfYear=currentDate.getDayOfYear();//检查日期所在年份是否为闰年booleanisLeapYear=currentDate.isLeapYear();//获取日期所在月份的天数intdaysInMonth=currentDate.lengthOfMonth();//获取日期所在年份的天数intdaysInYear=currentDate.lengthOfYear();//获取星期几的整数值intdayOfWeekValue=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(year,month,day)来创建一个特定的日期对象
LocalDatecurrentDate1=LocalDate.of(2023,10,22);System.out.println("当前日期为:"+currentDate1);其输出结果为:
当前日期为:2023-10-22
除了使用LocalDate.of来创造一个特定的日期对象外,我们还可以将一个格式标准的String对象转化为LocalData对象:LocalDate.parse,LocalDate.parse用于将字符串表示的日期解析为LocalDate对象。它允许你将字符串日期按照指定的日期格式转换为日期对象,以便后续操作或显示。
//创建一个字符串日期Stringstringdata="2023-01-06";//格式化日期规则DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");//将字符串日期按照规则转化为LocalData对象LocalDatestringcurrentDate1=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对象呢?答案还是使用我们的DateTimeFormatterformatter,格式化日期,只需要将值设为yyyy-M-d即可读取,并且如果需要的话还可以补零。
//原始日期字符串StringoriginalDate="2023-1-1";//将日期字符串解析为LocalDate对象LocalDatedate=LocalDate.parse(originalDate,DateTimeFormatter.ofPattern("yyyy-M-d"));System.out.println("格式化前的日期:"+originalDate);//使用DateTimeFormatter格式化日期,指定月份和日期部分的宽度为两位StringformattedDate=date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));System.out.println("格式化后的日期:"+formattedDate);其输出结果为:
格式化前的日期:2023-1-1格式化后的日期:2023-01-01
1.plusYears(longyears),minusYears(longyears):增加或减少指定年数。
LocalDatedate=LocalDate.now();LocalDatefutureDate=date.plusYears(2);//增加2年LocalDatepastDate=date.minusYears(1);//减少1年System.out.println("增加后的年数:"+futureDate);//增加后的年数:2025-10-11System.out.println("减少后的年数:"+pastDate);//减少后的年数:2022-10-112.plusMonths(longmonths),minusMonths(longmonths):增加或减少指定月数。
3.plusWeeks(longweeks),minusWeeks(longweeks):增加或减少指定周数。
4.plusDays(longdays),minusDays(longdays):增加或减少指定天数。(函数形式一样,所以月周天不做代码展示了)
5.除了对年月周日单独操作外,我们还可以进行统一的操作,比如增加一年零三个月(plus为增,minus为减)
LocalDatedate=LocalDate.now();LocalDatefutureDate=date.plus(Period.of(1,2,0));//增加1年3个月System.out.println("当前日期:"+date);//当前日期:2023-10-11System.out.println("增加后的日期:"+futureDate);//增加后的日期:2024-12-11
LocalDatecurrentDate=LocalDate.now();//获取当前周的第一天(星期一)LocalDatefirstDayOfWeek=currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));//获取当前周的最后一天(星期日)LocalDatelastDayOfWeek=currentDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));System.out.println("本周第一天:"+firstDayOfWeek);//本周第一天:2023-10-09System.out.println("本周最后一天:"+lastDayOfWeek);//本周最后一天:2023-10-15
//获取当前日期LocalDatecurrentDate=LocalDate.now();//获取当前月的第一天LocalDatefirstDayOfMonth=currentDate.with(TemporalAdjusters.firstDayOfMonth());//获取当前月的最后一天LocalDatelastDayOfMonth=currentDate.with(TemporalAdjusters.lastDayOfMonth());System.out.println("本月第一天:"+firstDayOfMonth);//本月第一天:2023-10-01System.out.println("本月最后一天:"+lastDayOfMonth);//本月最后一天:2023-10-31
//获取当前日期LocalDatecurrentDate=LocalDate.now();//获取WeekFields对象,指定周的起始日为星期一//4指定了星期四作为一年中的第一天。这影响了一年中的第一周是如何定义的。在这种定义下,一年中的第一周将包含星期四//因此星期四所在的周将被视为第一周,直到下一年的星期四。WeekFieldsweekFields=WeekFields.of(DayOfWeek.MONDAY,4);//获取当前日期所在周是本月的第几周intweekOfMonth=currentDate.get(weekFields.weekOfMonth());//获取当前日期所在周是本年的第几周intweekOfYear=currentDate.get(weekFields.weekOfWeekBasedYear());System.out.println("当前日期所在周是本月的第"+weekOfMonth+"周");System.out.println("当前日期所在周是本年的第"+weekOfYear+"周");
以下是一些常见的TemporalAdjusters方法及其功能:
firstDayOfMonth():返回指定日期所在月份的第一天。
lastDayOfMonth():返回指定日期所在月份的最后一天。
firstDayOfNextMonth():返回指定日期下个月的第一天。
firstDayOfNextYear():返回指定日期下一年的第一天。
next(DayOfWeekdayOfWeek):返回指定日期之后的下一个星期几。例如,next(DayOfWeek.MONDAY)返回下一个星期一。
previous(DayOfWeekdayOfWeek):返回指定日期之前的上一个星期几。
nextOrSame(DayOfWeekdayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回下一个指定星期几。
previousOrSame(DayOfWeekdayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回上一个指定星期几。
firstInMonth(DayOfWeekdayOfWeek):返回指定日期所在月份的第一个指定星期几。
lastInMonth(DayOfWeekdayOfWeek):返回指定日期所在月份的最后一个指定星期几。
dayOfWeekInMonth(intordinal,DayOfWeekdayOfWeek):返回指定日期所在月份的第ordinal个指定星期几。例如,dayOfWeekInMonth(2,DayOfWeek.WEDNESDAY)返回指定日期所在月份的第二个星期三。
firstDayOfYear():返回指定日期所在年份的第一天。
lastDayOfYear():返回指定日期所在年份的最后一天。
equals()方法用于检查两个LocalDate对象是否表示相同的日期。如果两个对象表示相同的日期,equals()方法将返回true,否则返回false。
LocalDatedate1=LocalDate.of(2023,5,15);LocalDatedate2=LocalDate.of(2023,5,15);LocalDatedate3=LocalDate.of(2023,5,16);booleanareEqual=date1.equals(date2);//返回truebooleanareEqual2=date1.equals(date3);//返回false
isBefore()方法用于检查一个LocalDate是否在另一个LocalDate之前。如果第一个日期在第二个日期之前,该方法返回true,否则返回false。
LocalDatedate1=LocalDate.of(2023,5,15);LocalDatedate2=LocalDate.of(2023,5,20);booleanisBefore=date1.isBefore(date2);//返回truebooleanisBefore2=date2.isBefore(date1);//返回false
isAfter()方法用于检查一个LocalDate是否在另一个LocalDate之后。如果第一个日期在第二个日期之后,该方法返回true,否则返回false。
LocalDatedate1=LocalDate.of(2023,5,15);LocalDatedate2=LocalDate.of(2023,5,10);booleanisAfter=date1.isAfter(date2);//返回true
compareTo()方法用于将两个LocalDate对象进行比较,并返回一个整数值。如果第一个日期在第二个日期之前,返回负数;如果两个日期相同,返回零;如果第一个日期在第二个日期之后,返回正数。
LocalDatedate1=LocalDate.of(2023,5,15);LocalDatedate2=LocalDate.of(2023,5,20);intresult=date1.compareTo(date2);//返回-5intresult2=date2.compareTo(date1);//返回5
这个示例将展示如何使用LocalDate来计算一个人的年龄。假设当前日期是2021年7月31日,我们想计算一个人1995年10月24日出生时的年龄。下面是实现方法的代码,其中代码块中的“xxxx-xx-xx”部分需要替换成具体的年月日:
LocalDatebirthDate=LocalDate.of(1995,Month.OCTOBER,24);LocalDatecurrentDate=LocalDate.now();intage=Period.between(birthDate,currentDate).getYears();System.out.println("Age:"+age);输出结果为:
Age:25
这个示例将展示如何使用LocalDate来计算一个人的年龄。假设当前日期是2021年7月31日,我们有一个包含生日的字符串“1995-10-24”,我们想计算这个人的年龄。下面是实现方法的代码:
DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDatebirthDate=LocalDate.parse("1995-10-24",formatter);LocalDatecurrentDate=LocalDate.now();intage=Period.between(birthDate,currentDate).getYears();System.out.println("Age:"+age);