Java中的LocalDate及其示例

时间:2020-01-09 10:35:16  来源:igfitidea点击:

java.time.LocalDate类是Java 8中添加的新日期和时间API的一部分,该API表示ISO-8601日历系统中的日期,例如2019-10-03. LocalDate类不存储或者表示时间或者时区。

LocalDate类是不可变的,因此是线程安全的。它也被标记为final,因此无法扩展。

在这篇文章中,我们将看到一些示例,这些示例演示Java LocalDate类的用法。

创建LocalDate的实例

LocalDate类没有任何公共构造函数来获取实例,我们将使用工厂方法。

1.使用now()从默认时区的系统时钟获取当前日期的实例。

LocalDate currentDate = LocalDate.now();
System.out.println(currentDate); //2019-10-26

2.使用of()方法从年,月和日中获取LocalDate的实例。

LocalDate date = LocalDate.of(2019, 10, 18);
System.out.println(date); // 2019-10-18

从LocalDate获取日期值

有一些方法可以从LocalDate实例获取日,月,年值。

public class FormatDate {
  public static void main(String[] args) {
    LocalDate date = LocalDate.of(2019, 10, 18);
    System.out.println("Year-" + date.getYear());
    // Using java.time.Month Enum
    System.out.println("Month-" + date.getMonth());
    // Month as int value
    System.out.println("Month-" + date.getMonthValue());
    System.out.println("Day-" + date.getDayOfMonth());
    System.out.println("Day of week-" + date.getDayOfWeek());
    System.out.println("Day of year-" + date.getDayOfYear());
  }
}

输出:

Year-2019
Month-OCTOBER
Month-10
Day-18
Day of week-FRIDAY
Day of year-291

使用LocalDate检查年份是否为a年

使用Java中LocalDate类的isLeapYear()方法,可以检查年份是否为is年。

public class FormatDate {
  public static void main(String[] args) {
    LocalDate localDate = LocalDate.of(2019, 10, 18);
    
    String msg = localDate.isLeapYear()?"is a leap year":"is not a leap year";
    System.out.println(localDate.getYear() + " " + msg);
    
    localDate = LocalDate.of(2016, 10, 18);
    msg = localDate.isLeapYear()?"is a leap year":"is not a leap year";
    System.out.println(localDate.getYear() + " " + msg);
  }
}

输出:

2019 is not a leap year
2016 is a leap year

使用LocalDate进行日期计算

有一些方法可以从LocalDate添加或者减去天,月和年。

  • plus(longToToTo,TemporalUnit单位)–返回此日期的副本,其中添加了指定的数量。

  • plus(TemporalAmount amountToAdd)–返回此日期的副本,其中添加了指定的数量。

  • plusDays(long daysToAdd)–返回此LocalDate的副本,其中添加了指定的天数。

  • plusMonths(long monthsToAdd)–返回此LocalDate的副本,其中添加了指定的月数。

  • plusWeeks(long weekToAdd)–返回此LocalDate的副本,其中添加了指定的周数。

  • plusYears(long yearsToAdd)–返回此LocalDate的副本,其中添加了指定的年数。

  • minus(long amountToSubtract,TemporalUnit单位)–返回该日期的副本,其中减去指定的数量。

  • minus(TemporalAmount amountToSubtract)–返回该日期的副本,其中减去指定的数量。

  • minusDays(long daysToSubtract)–返回此LocalDate的副本,其中减去指定的天数。

  • minusMonths(long monthsToSubtract)–返回此LocalDate的副本,其中减去指定的月数。

  • minusWeeks(long weekToSubtract)–返回此LocalDate的副本,其中减去指定的周数。

  • minusYears(long yearsToSubtract)–返回此LocalDate的副本,其中减去指定的年数。

LocalDate localDate = LocalDate.of(2019, Month.OCTOBER, 18);
System.out.println("Created Local Date - " + localDate);//2019-10-18	  
System.out.println("Date after subtraction - " + localDate.minusDays(40));//2019-09-08
System.out.println("Date after year subtraction - " + localDate.minusYears(2));//2017-10-18
LocalDate localDate = LocalDate.of(2019, Month.OCTOBER, 18);
System.out.println("Created Local Date - " + localDate);//2019-10-18	  
System.out.println("Date after addition - " + localDate.plusDays(40));//2019-11-27
System.out.println("Date after year addition - " + localDate.plusYears(2));//2021-10-18

在Java中比较LocalDate

为了比较两个LocalDate实例,有以下方法:

  • compareTo(ChronoLocalDate other)–将此日期与另一个日期进行比较。返回比较器值,如果小于则返回负数,如果大于则返回正数。

  • isAfter(ChronoLocalDate other)–检查该日期是否在指定的日期之后。如果此日期晚于指定日期,则返回true。

  • isBefore(ChronoLocalDate other)–检查此日期是否在指定日期之前。如果此日期早于指定日期,则返回true。

  • isEqual(ChronoLocalDate other)–检查此日期是否等于指定的日期。如果此日期等于指定的日期,则返回true。

public class FormatDate {
  public static void main(String[] args) {
    LocalDate ld1 = LocalDate.of(2019, Month.OCTOBER, 18);
    LocalDate ld2 = LocalDate.of(2019, Month.SEPTEMBER, 20);
    System.out.println(ld1.compareTo(ld2));
    System.out.println(ld2.compareTo(ld1));
    
    System.out.println(ld1.isAfter(ld2));
    System.out.println(ld1.isBefore(ld2));
    System.out.println(ld1.isEqual(ld2));
  }
}

输出:

1
-1
true
false
false

将字符串转换为LocalDate

检查此帖子以获取String到LocalDate的转换将Java中的String转换为Date

将LocalDate转换为字符串

检查此帖子以将LocalDate转换为String将Java中的日期转换为String