文档

Java™教程
隐藏目录
自定义格式
追踪:国际化
课程:格式化
章节:日期和时间

自定义格式


版本说明: 此日期和时间部分使用了java.util包中的日期和时间API。JDK 8版本中提供了java.timeAPI,它提供了一个全面的日期和时间模型,比java.util类有着显著的改进。有关java.timeAPI的详细信息,请参阅日期时间教程。你可能对旧版日期时间代码感兴趣。

前面的章节使用预定义格式描述了DateFormat类提供的格式化样式。在大多数情况下,这些预定义格式已经足够使用。然而,如果你想要创建自定义的格式,你可以使用SimpleDateFormat类。

以下代码示例演示了SimpleDateFormat类的方法。你可以在名为SimpleDateFormatDemo的文件中找到这些示例的完整源代码。

关于模式

当你创建SimpleDateFormat对象时,你需要指定一个模式String。模式String的内容决定了日期和时间的格式。有关模式语法的详细描述,请参阅日期格式模式语法中的表格。

下面的代码根据传递给SimpleDateFormat构造方法的模式String格式化日期和时间。format方法返回的String包含要显示的格式化日期和时间。

Date today;
String output;
SimpleDateFormat formatter;

formatter = new SimpleDateFormat(pattern, currentLocale);
today = new Date();
output = formatter.format(today);
System.out.println(pattern + " " + output);

以下表格显示了上述代码示例在指定美国Locale时生成的输出:

自定义日期和时间格式
模式 输出
dd.MM.yy 30.06.09
yyyy.MM.dd G 'at' hh:mm:ss z 2009.06.30 AD at 08:29:36 PDT
EEE, MMM d, ''yy Tue, Jun 30, '09
h:mm a 8:29 PM
H:mm 8:29
H:mm:ss:SSS 8:28:36:249
K:mm a,z 8:29 AM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa 2009.June.30 AD 08:29 AM

模式和区域设置

SimpleDateFormat 类是区域设置敏感的。如果你在实例化 SimpleDateFormat 时没有指定 Locale 参数,它会根据默认的 Locale 格式化日期和时间。模式和 Locale 都决定了格式。对于相同的模式,如果 Locale 不同,SimpleDateFormat 可能会以不同的方式格式化日期和时间。

在下面的示例代码中,模式是硬编码在创建 SimpleDateFormat 对象的语句中:

Date today;
String result;
SimpleDateFormat formatter;

formatter = new SimpleDateFormat("EEE d MMM yy", currentLocale);
today = new Date();
result = formatter.format(today);
System.out.println("Locale: " + currentLocale.toString());
System.out.println("Result: " + result);

currentLocale 设置为不同的值时,上述代码示例会生成以下输出:

Locale: fr_FR
Result: mar. 30 juin 09
Locale: de_DE
Result: Di 30 Jun 09
Locale: en_US
Result: Tue 30 Jun 09

日期格式模式语法

你可以从以下表格中的符号列表中设计自己的日期和时间格式模式:

符号 含义 展示 示例
G 纪元指示符 文本 公元
y 年份 数字 2009
M 年中的月份 文本和数字 七月 & 07
d 月中的天数 数字 10
h 上午/下午的小时数 (1-12) 数字 12
H 一天中的小时数 (0-23) 数字 0
m 小时中的分钟数 数字 30
s 分钟中的秒数 数字 55
S 毫秒数 数字 978
E 星期中的天数 文本 星期二
D 年中的天数 数字 189
F 月中的星期数 数字 2 (7月的第二个星期三)
w 年中的周数 数字 27
W 月中的周数 数字 2
a 上午/下午标记 文本 下午
k 一天中的小时数 (1-24) 数字 24
K 上午/下午的小时数 (0-11) 数字 0
z 时区 文本 太平洋标准时间
' 文本转义符 分隔符 (无)
' 单引号 字面量 '

非字母字符被视为引用文本。也就是说,即使它们没有被单引号括起来,它们也会出现在格式化文本中。

您指定的符号字母数量还决定了格式。例如,如果“zz”模式结果为“PDT”,那么“zzzz”模式将生成“太平洋夏令时”。以下表总结了这些规则:

显示 符号数量 结果
文本 1 - 3 缩写形式(如果存在)
文本 >= 4 完整形式
数字 需要的最小数字位数 较短的数字用零填充(对于年份,如果'y'的计数为2,则年份将截断为2位数)
文本 & 数字 1 - 2 数字形式
文本 & 数字 3 文本形式

上一页: 使用预定义格式
下一页: 更改日期格式符号