# Java 8 `DateTimeFormatter`

> 原文： [https://howtodoinjava.com/java/date-time/java8-datetimeformatter-example/](https://howtodoinjava.com/java/date-time/java8-datetimeformatter-example/)

Java 示例，可使用`DateTimeFormatter`将`ZonedDateTime`，`LocalDateTime`，`LocalDate`和`LocalTime`格式化为具有预定义和自定义模式的字符串。

## 1\. 创建`DateTimeFormatter`

您可以通过两种方式创建`DateTimeFormatter`：

1.  使用内置常量
2.  使用`ofPattern()`方法创建自己的模式

```java
//Use inbuilt pattern constants
DateTimeFormatter inBuiltFormatter1 = DateTimeFormatter.ISO_DATE_TIME;

DateTimeFormatter inBuiltFormatter2 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

//Define your own custom patterns
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mma z");

```

## 2\. 格式化`ZonedDateTime`

Java 示例，将`ZonedDateTime`格式化为带有`DateTimeFormatter`的字符串。

```java
//Create formatter
DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm a z");

//Zoned datetime instance
ZonedDateTime zdt = ZonedDateTime.now();

//Get formatted String
String zdtString = FOMATTER.format(zdt);

System.out.println(zdtString);		// 07/15/2018 at 02:51 PM IST

```

## 3\. 格式化`LocalDateTime`

`LocalDate`没有时区部分。 因此，相应地创建模式。

```java
//Create formatter
DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm a");

//Local date time instance
LocalDateTime localDateTime = LocalDateTime.now();

//Get formatted String
String ldtString = FOMATTER.format(localDateTime);

System.out.println(ldtString);		// 07/15/2018 at 02:49 PM

```

## 4\. 格式化`LocalDate`

`LocalDate`没有时间和时区部分。 因此，相应地创建模式。

```java
//Create formatter
DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy");

//Local date instance
LocalDate localDate = LocalDate.now();

//Get formatted String
String dateString = FOMATTER.format(localDate);

System.out.println(dateString);		//07/15/2018

```

## 5\. 格式化`LocalTime`

`LocalTime`没有日期和时区部分。 因此，相应地创建模式。

```java
//Create formatter
DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("hh:mm a");

//Local time instance
LocalTime localTime = LocalTime.now();

//Get formatted String
String localTimeString = FOMATTER.format(localTime);

System.out.println(localTimeString);		// 02:53 PM

```

## 6\. 有用的格式化模式

| 模式 | 示例 |
| --- | --- |
| `yyyy-MM-dd`（ [ISO](https://www.w3.org/QA/Tips/iso-date) ） | `2018-07-14` |
| `dd-MMM-yyyy` | `14-Jul-2018` |
| `dd/MM/yyyy` | `14/07/2018` |
| `E, MMM dd yyyy` | `Sat, Jul 14 2018` |
| `h:mm a` | `12:08 PM` |
| `EEEE, MMM dd, yyyy HH:mm:ss a` | `Saturday, Jul 14, 2018 14:31:06 PM` |
| `yyyy-MM-dd'T'HH:mm:ssZ` | `2018-07-14T14:31:30+0530` |
| `hh 'o''clock' a, zzzz` | `12 o’clock PM, Pacific Daylight Time` |
| `K:mm a, z` | `0:08 PM, PDT` |

## 7\. 更多例子

1.  [Java 8 `ResolverStyle.STRICT` – 严格的日期验证和解析](https://howtodoinjava.com/java8/resolverstyle-strict-date-parsing/)

学习愉快！

参考文献：

1.  [`DateTimeFormatter` Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)
2.  [`ZonedDateTime` Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html)
3.  [`LocalDateTime` Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html)
4.  [`LocalDate` Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html)
5.  [`LocalTime` Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html)