### 日期和时间字符串格式化

在应用程序设计中，经常会需要显示时间和日期。如果想输出满意的日期时间格式，一般需要编写大量的代码经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。

#### 1．日期格式化

先来看下面的代码。

例 返回一个月中的天数，实例代码如下：

Date date = new Date(); //创建 Date 对象 date

String s = String.format("%te", date); //通过 format()方法对 date 进行格式化

上述代码变量 s 的值是当前日期中的天数，如今天是 15 号，则 s 的值为 15。“%te”是转换符，常用的日期和时间的格式转换符如表 1 所示。

表 1 常见的日期时间转换符

转换符 | 说明 | 示例
%te | 一个月中的某一天（1-31） | 2
%tb | 指定语言环境的月份简称 | Feb（英文）、二月（中文）
%tB | 指定语言环境的月份全称 | February（英文）、二月（中文）
%tA | 指定语言环境的星期几全称 | Monday（英文）、星期一（中文）
%ta | 指定语言环境的星期几简称 | Mon（英文）、星期一（中文）
%tc | 包括全部日期和时间信息 | 星期二 三月 25 13:37:22 CST 2008
%tY | 4 位年份 | 2008
%tj | 一年中的第几天（001-366） | 085
%tm | 月份 | 03
%td | 一个月中的第几天（01-31） | 02
%ty | 二位年份 | 08

例 在项目中创建类 Eval，实现将当前日期信息以 4 位年份、月份全称、2 位日期形式输出。

import java.util.Date; //导入 java.util.Date 类

public class Eval { //新建类

public static void main(String[] args) { //主方法

Date date = new Date(); //创建 Date 对象 date

String year = String.format("%tY", date); //将 date 进行格式化

String month = String.format("%tB", date);

String day = String.format("%td", date);

System.out.println("今年是：" + year + "年");//输出信息

System.out.println("现在是：" + month);

System.out.println("今天是：" + day + "号");

}

}

运行的结果如图 1 所示：

图 1 运行结果

#### 2．时间格式化

使用 format()方法不但可完成日期的格式化，也可实现时间的格式化。时间格式化转换符要比日期转换符更多、更精确。它可以将时间格式化成时、分、秒、毫秒。格式化时间的转换符如表 2 所示。

表 2 时间格式化转化符

转换符 | 说明 | 示例
%tH | 2 位数字的 24 时制的小时（00-23） | 14
%tI | 2 位数字的 12 时制的小时（01-12） | 05
%tk | 2 位数字的 24 时制的小时（0-23） | 5
%tl | 2 位数字的 12 时制的小时(1-12) | 10
%tM | 2 位数字的分钟（00-59） | 05
%tS | 2 位数字的秒数（00-60） | 12
%tL | 3 位数字的毫秒数（000-999） | 920
%tN | 9 位数字的微秒数(000000000-999999999) | 062000000
%tp | 指定语言环境下上午或下午标记 | 下午（中文）、pm(英文)
%tz | 相对于 GMT RFC 82 格式的数字时区偏移量 | +0800
%tZ | 时区缩写形式的字符串 | CST
%ts | 1970-01-01 00:00:00 至现在经过的秒数 | 1206426646
%tQ | 1970-01-01 00:00:00 至现在经过的毫秒数 | 1206426737453

例 在项目中创建类 GetDate，实现将当前时间信息以 2 位小时、2 位分钟数 2 位秒数形式输出。

import java.util.Date; //导入 java.util.Date 类

public class GetDate { //新建类

public static void main(String[] args) { //主方法

Date date = new Date(); //创建 Date 对象 date

String hour = String.format("%tH", date); //将 date 进行格式化

String minute = String.format("%tM", date);

String second = String.format("%tS", date);

System.out.println("现在是：" + hour + "时" + minute + "分" + second + "秒");//输出的信息

}

}

运行的结果如图 2 所示。

图 2 运行结果

#### 3．格式化常见的日期时间组合

格式化日期与时间的转换符定义了各种格式日期字符串的方式，其中最常用的日期和时间的组合格式如表 3 所示。

表 3 常见的日期和时间组合的格式

转换符 | 说明 | 示例
%tF | “年-月-日”格式（四位年份） | 2008-03-25
%tD | “月/日/年”格式（二位年份） | 03/25/08
%tc | 全部日期和时间信息 | 星期二 三月 25 15:20:00 CST 2008
%tr | “时：分：秒 PM(AM)”格式（12 时制） | 03:22:06 下午
%tT | “时：分：秒”格式（24 时制） | 15:23:50
%tR | “时：分”格式（24 时制） | 15:25

例 在项目中创建类 DateAndTime，在主方法中实现将当前日期时间的全部信息以及指定格式的日期输出。

import java.util.Date; //导入 java.util.Date 类

public class DateAndTime { //创建类

public static void main(String[] args) { //主方法

Date date = new Date(); //创建 Date 对象 date

String time = String.format("%tc", date); //将 date 格式化

String form = String.format("%tF", date);

System.out.println("全部的时间信息是：" + time);//将格式化后的日期时间输出

System.out.println("年-月-日格式："+form);

}

}

运行结果如图 3 所示。

图 3 运行结果