java.time.LocalDate的优点

  最近搞东西的时候要操作时间,就去网上了解一下时间操作被用的最多的几个类java.util.Calendar、java.util.Date、java.time.LocalDate,这三个时间类中java.time.LocalDate是由java 8新提供的,记录下三个类的特点。

  • java.util.Date、java.util.Calendar

  Date和Calendar不支持时区,且非线程安全。Date可读性差,需要对其进行格式化,而且Date对时间处理比较麻烦,想获取某年、某月、某星期之类的时间太难了,可能有人会说Date不是有getYear、getMonth等这些方法啊,获取年月日很简单,但要知道,Date的这些方法都被弃用了。

  • java.time.LocalDate

  LocalDate是不可变的和线程安全的时间类,且支持时区设置,它是Java 8提供的全新日期时间类。

  LocalDate的常用API:

        方法名                          返回类型                说明    
getYear()                              int              获取当前日期的年
getMonth()                             Month            获取当前日期的月份对象
getMonthValue()                        int              获取当前日期的月
getDayOfWeek()                         DayOfWeek        获取当前日期对应星期几字段
getDayOfMonth()                        int              获取当前日期是该月第几天
getDayOfYear()                         int              获取当前日期是该年第几天
withYear(int year)                     LocalDate        修改当前日期的年份,如果修改后日期无效,
                                  将被更改为修改后日期该月的最后一个有效日期 withMonth(
int month) LocalDate 修改当前日期的月份(1-12),如果日期无效,
                                  将被更改为该月份最后一个有效日期 withDayOfMonth(
int dayOfMonth) LocalDate 修改当前日期在当月的第几天(1-31天,根据月份不同而变化)
                                  ,如果修改后日期无效,抛出异常 isLeapYear()
boolean 是否是闰年,true:是闰年,false:平年 lengthOfMonth() int 获取当前日期所在月份的总天数 lengthOfYear() int 获取当前日期所在年份的总天数 plusYears(long yearsToAdd) LocalDate 当前日期所在年份增加指定年份数 plusMonths(long monthsToAdd) LocalDate 当前日期所在月份增加指定月份数 plusWeeks(long weeksToAdd) LocalDate 当前日期增加指定的周数 plusDays(long daysToAdd) LocalDate 当前日期增加指定的天数 minusYears(long yearsToSubtract) LocalDate 当前日期所在年份减去指定年份数 minusMonths(long monthsToSubtract) LocalDate 当前日期所在月份减去指定月份数 minusWeeks(long weeksToSubtract) LocalDate 当前日期减去指定的周数 minusDays(long daysToSubtract) LocalDate 当前日期减去指定的天数 compareTo(ChronoLocalDate other) int 比较当前日期和other日期的大小,返回值如
                                  果为正则当前日期较大,为负则other日期较大 isBefore(ChronoLocalDate other)
boolean 获取当前日期是否在other日期之前, isAfter(ChronoLocalDate other) boolean 获取当前日期是否在other日期之后 isEqual(ChronoLocalDate other) boolean 获取当前日期是否与other日期相等

  常用API方法:

LocalDate now = LocalDate.now();
System.out.println("获取当前日期的LocalDate对象:"+now);
LocalDate date2 = LocalDate.parse("2012-02-29");
System.out.println("获取指定字符串日期的LocalDate对象:"+date2);
int year = now.getYear();
System.out.println("getYear()获取当前日期的年份:"+year);
Month month = now.getMonth();
System.out.println("getMonth()获取当前日期的月份对象:"+month);
int monthNum = now.getMonthValue();
System.out.println("getMonthValue()获取当前日期的月份:"+monthNum);
DayOfWeek dayofWeek = now.getDayOfWeek();
System.out.println("getDayOfWeek()获取当前日期对应的星期几字段:"+monthNum);
int dayOfMonth = now.getDayOfMonth();
System.out.println("getDayOfMonth()获取当前日期在当前月的第几天:"+dayOfMonth);
int dayOfYear = now.getDayOfYear();
System.out.println("getDayOfYear()获取当前日期在当前年的第几天:"+dayOfYear);
LocalDate nowYear = now.withYear(2013);
System.out.println("withYear()修改当前日期年份: "+nowYear);
LocalDate nowMonth = now.withMonth(3);
System.out.println("withMonth()修改当前日期月份: "+nowMonth);
LocalDate nowDayOfMonth = now.withDayOfMonth(21);
System.out.println("withDayOfMonth()修改当前日期在当月的天数: "+nowDayOfMonth);
boolean isLeapYear = now.isLeapYear();
System.out.println("isLeapYear()获取当前日期是否是闰年: "+isLeapYear);
int lengthOfMonth = now.lengthOfMonth();
System.out.println("lengthOfMonth()获取当前日期所在月份总天数: "+lengthOfMonth);
int lengthOfYear = now.lengthOfYear();
System.out.println("lengthOfYear()获取当前日期所在年份总天数: "+lengthOfYear);
LocalDate nowPlusYears = now.plusYears(-2);
System.out.println("plusYears当前日期所在年份增加指定年份数:"+nowPlusYears);
LocalDate nowPlusMonths = now.plusMonths(2);
System.out.println("plusMonths当前日期所在月份增加指定月份数:"+nowPlusMonths);
LocalDate nowPlusWeeks = now.plusWeeks(2);
System.out.println("plusMonths当前日期增加指定星期周数:"+nowPlusWeeks);
LocalDate nowDays = now.plusDays(3);
System.out.println("nowDays当前日期增加指定天数:"+nowDays);
int compareTo = now.compareTo(date2);
System.out.println("compareTo比较当前日期与指定日期的大小:"+compareTo);
boolean before = now.isBefore(date2);
System.out.println("isBefore获取当前日期是否在指定日期之前:"+before);
boolean after = now.isAfter(date2);
System.out.println("isAfter获取当前日期是否在指定日期之后:"+after);
boolean equal = now.isEqual(date2);
System.out.println("isEqual获取当前日期是否与指定日期相等:"+equal);

  运行结果:

获取当前日期的LocalDate对象:2020-07-07
获取指定字符串日期的LocalDate对象:2012-02-29
getYear()获取当前日期的年份:2020
getMonth()获取当前日期的月份对象:JULY
getMonthValue()获取当前日期的月份:7
getDayOfWeek()获取当前日期对应的星期几字段:7
getDayOfMonth()获取当前日期在当前月的第几天:7
getDayOfYear()获取当前日期在当前年的第几天:189
withYear()修改当前日期年份: 2013-07-07
withMonth()修改当前日期月份: 2020-03-07
withDayOfMonth()修改当前日期在当月的天数: 2020-07-21
isLeapYear()获取当前日期是否是闰年: true
lengthOfMonth()获取当前日期所在月份总天数: 31
lengthOfYear()获取当前日期所在年份总天数: 366
plusYears当前日期所在年份增加指定年份数:2018-07-07
plusMonths当前日期所在月份增加指定月份数:2020-09-07
plusMonths当前日期增加指定星期周数:2020-07-21
nowDays当前日期增加指定天数:2020-07-10
compareTo比较当前日期与指定日期的大小:8
isBefore获取当前日期是否在指定日期之前:false
isAfter获取当前日期是否在指定日期之后:true
isEqual获取当前日期是否与指定日期相等:false
原文地址:https://www.cnblogs.com/lovelyli/p/13261995.html