# 使用预定义格式

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html](https://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html)

* * *

**Version note:** This Date and Time section uses the date and time APIs in the `java.util` package. The `java.time` APIs, available in the JDK 8 release, provides a comprehensive date and time model that offers significant improvements over the `java.util` classes. The `java.time` APIs are described in the [Date Time](../../datetime/index.html) trail. The [Legacy Date-Time Code](../../datetime/iso/legacy.html) page might be of particular interest.

* * *

[`DateFormat`](https://docs.oracle.com/javase/8/docs/api/java/text/DateFormat.html) 类允许您以区域设置敏感的方式使用预定义样式格式化日期和时间。以下部分演示了如何将`DateFormat`类与名为 [`DateFormatDemo.java`](examples/DateFormatDemo.java) 的程序一起使用。

## 日期

使用`DateFormat`类格式化日期分为两步。首先，使用`getDateInstance`方法创建格式化程序。其次，调用`format`方法，该方法返回包含格式化日期的`String`。以下示例通过调用以下两种方法来格式化今天的日期：

```
Date today;
String dateOut;
DateFormat dateFormatter;

dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT, currentLocale);
today = new Date();
dateOut = dateFormatter.format(today);

System.out.println(dateOut + " " + currentLocale.toString());

```

此代码生成的输出如下。请注意，日期的格式随`Locale`而变化。由于`DateFormat`对语言环境敏感，因此它会处理每个`Locale`的格式详细信息。

```
30 juin 2009     fr_FR
30.06.2009       de_DE
Jun 30, 2009     en_US

```

上面的代码示例指定了`DEFAULT`格式样式。 `DEFAULT`样式只是`DateFormat`类提供的预定义格式样式之一，如下所示：

*   默认
*   短
*   介质
*   长
*   充分

下表显示了如何使用美国和法国语言环境为每种样式设置日期格式：

Sample Date Formats
| 样式 | 美国地区 | 法国语言 |
| --- | --- | --- |
| `DEFAULT` | 2009 年 6 月 30 日 | 2009 年 7 月 30 日 |
| `SHORT` | 09 年 6 月 30 日 | 30/06/09 |
| `MEDIUM` | 2009 年 6 月 30 日 | 2009 年 7 月 30 日 |
| `LONG` | 2009 年 6 月 30 日 | 2009 年 7 月 30 日 |
| `FULL` | 2009 年 6 月 30 日，星期二 | mardi 30 juin 2009 |

## 时

`Date`对象表示日期和时间。使用`DateFormat`类格式化时间与格式化日期类似，不同之处在于您使用`getTimeInstance`方法创建格式化程序，如下所示：

```
DateFormat timeFormatter =
    DateFormat.getTimeInstance(DateFormat.DEFAULT, currentLocale);

```

下表显示了美国和德国语言环境的各种预定义格式样式：

Sample Time Formats
| 样式 | 美国地区 | 德国语言环境 |
| --- | --- | --- |
| `DEFAULT` | 上午 7:03:47 | 7 时 03 分 47 秒 |
| `SHORT` | 上午 7:03 | 07:03 |
| `MEDIUM` | 上午 7:03:47 | 7 时 03 分 07 秒 |
| `LONG` | 太平洋夏令时间上午 7:03:47 | 07:03:45 PDT |
| `FULL` | 太平洋夏令时间上午 7:03:47 | 7.03 Uhr PDT |

## 日期和时代

要在相同的`String`中显示日期和时间，请使用`getDateTimeInstance`方法创建格式化程序。第一个参数是日期样式，第二个参数是时间样式。第三个参数是`Locale`。这是一个简单的例子：

```
DateFormat formatter = DateFormat.getDateTimeInstance(
                           DateFormat.LONG, 
                           DateFormat.LONG, 
                           currentLocale);

```

下表显示了美国和法国语言环境的日期和时间格式样式：

Sample Date and Time Formats
| 样式 | 美国地区 | 法国语言 |
| --- | --- | --- |
| `DEFAULT` | 2009 年 6 月 30 日上午 7:03:47 | 30 juin 2009 07:03:47 |
| `SHORT` | 6/30/09 7:03 AM | 30/06/09 07:03 |
| `MEDIUM` | 2009 年 6 月 30 日上午 7:03:47 | 30 juin 2009 07:03:47 |
| `LONG` | 2009 年 6 月 30 日上午 7:03:47 PDT | 2009 年 7 月 30 日 07:03:47 PDT |
| `FULL` | 2009 年 6 月 30 日星期二上午 7:03:47 PDT | mardi 30 juin 2009 07 h 03 PDT |