# Java `LocalDate`类

> 原文： [https://howtodoinjava.com/java/date-time/java-time-localdate-class/](https://howtodoinjava.com/java/date-time/java-time-localdate-class/)

[Java 8 中引入](https://howtodoinjava.com/java8/date-and-time-api-changes-in-java-8-lambda/)的`java.time.LocalDate`类，**表示没有时区和时间的本地日期**，例如`2019-03-27`。 它具有从一天中时刻开始的时间部分，即分钟和秒被视为零。

我们可以**使用`LocalDate`实例**来表示一天中没有一天中特定时间的日期，例如生日，假期或员工休假。

`java.util.Date`和`java.time.LocalDate`之间的主要区别是`LocalDate`实例是[**不可变的**](https://howtodoinjava.com/java/basics/how-to-make-a-java-class-immutable/)和[**线程安全**](https://howtodoinjava.com/java/multi-threading/what-is-thread-safety/)。

## 1\. 类声明

```java
public final class LocalDate
	extends Object
	implements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable
{
	//class body
}

```

## 2\. 如何创建`LocalDate`

通常，我们将在两种情况下创建本地日期实例，即获取当前日期或为指定日期创建本地日期。

#### 2.1 获取当前的本地日期

使用以下方法获取当前的本地日期。

```java
LocalDate today = LocalDate.now();	//1 - Recommended

LocalDate today = LocalDate.ofInstant(Instant.now(), ZoneId.systemDefault());	//

```

#### 2.2 创建指定的本地日期

要创建具有特定日期，月份和年份的本地日期，请使用以下方法。

```java
LocalDate dateInstance = LocalDate.of(2019, 3, 27);

LocalDate dateInstance = LocalDate.parse("2019-03-27");

```

## 3\. 如何将字符串解析为`LocalDate`

`LocalDate`类具有两个重载的`parse()`方法，用于*将字符串日期转换为本地日期*实例。

```java
parse(CharSequence text)	//1

parse(CharSequence text, DateTimeFormatter formatter)	//2

```

*   如果字符串包含[`ISO_LOCAL_DATE`](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_LOCAL_DATE)模式中的日期，即`yyyy-MM-dd`，请使用第一种方法。 这是 Java 中本地日期的**默认模式**。
*   对于其他任何日期模式，我们都需要使用第二种方法传递日期字符串以及表示该日期字符串的格式化器。

```java
//1 - default date pattern
String date = "2019-03-23";
LocalDate localDate = LocalDate.parse(date);

//2 - specific date pattern
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy");
String date = "23-Mar-2019";
LocalDate localDate = LocalDate.parse(date, formatter);

```

## 4\. 如何将`LocalDate`格式化为字符串

使用`LocalDate.format(DateTimeFormatter)`方法将本地日期格式化为所需的字符串表示形式。

```java
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yyyy");

LocalDate today = LocalDate.now();

String dateString = today.format(formatter);	//23-Mar-2019

```

## 5\. 如何修改本地日期

`LocalDate`提供以下方法，这些方法可用于获取相对于可用本地日期对象的新本地日期实例。

*   `plusDays()`
*   `plusWeeks()`
*   `plusMonths()`
*   `plusYears()`
*   `minusDays()`
*   `minusWeeks()`
*   `minusMonths()`
*   `minusYears()`

```java
LocalDate today = LocalDate.now();

//Same date 3 years later
LocalDate localDate1 = today.plusYears(3);	

//local date before 3 months
LocalDate localDate2 = today.minusMonths(3);

```

## 6\. Java `LocalDate`示例

通过一些示例，让我们更好地了解`LocalDate`类。

*   [将字符串解析为 Java 中的`LocalDate`](https://howtodoinjava.com/java/date-time/localdate-parse-string/)
*   [在 Java 中将`LocalDate`格式设置为字符串](https://howtodoinjava.com/java/date-time/localdate-format-example/) 
*   [将 Java 中的`LocalDate`转换为`java.util.Date`](https://howtodoinjava.com/java/date-time/localdate-to-date/)
*   [在 Java 中将日期转换为`LocalDate`](https://howtodoinjava.com/java/date-time/localdate-to-date/) 
*   [将 Java 中的`LocalDate`转换为`java.sql.Date`](https://howtodoinjava.com/java/date-time/localdate-to-sql-date/)
*   [在 Java 中将`LocalDate`转换为`ZonedDateTime`](https://howtodoinjava.com/java/date-time/localdate-zoneddatetime-conversion/) 
*   [在 Java 中将`LocalDate`转换为`LocalDateTime`](https://howtodoinjava.com/java/date-time/localdate-localdatetime-conversions/) 

学习愉快！

参考： [`LocalDate` Java 文档](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html)