Customizing Formats

Version note:

此日期和时间部分使用java\.util包中的日期和时间 API。 JDK 8 版本中提供的java\.time API 提供了一个全面的日期和时间模型,该模型对java\.util类进行了重大改进。 Date Time路径中描述了java\.time API。 旧版日期时间代码页面可能特别有趣。

上一节使用 预定义格式描述了DateFormat类提供的格式化样式。在大多数情况下,这些 预定义格式已足够。但是,如果要创建自己的自定义格式,则可以使用SimpleDateFormat类。

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

About Patterns

创建SimpleDateFormat对象时,请指定StringPattern。PatternString的内容确定日期和时间的格式。有关 Pattern 语法的完整说明,请参见日期格式 Pattern 语法中的表。

以下代码根据传递给SimpleDateFormat构造函数的 PatternString格式化日期和时间。 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时由上一个代码示例生成的输出:

自定义日期和时间格式

Pattern Output
dd.MM.yy 30.06.09
yyyy.MM.dd G'at'hh:mm:ss z 太平洋时间 2009 .06.30 AD at 08:29:36
EEE,MMM d,'yy 2009 年 6 月 30 日,星期二
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.AD.June.30 AD 08:29 AM

Pattern 和语言环境

SimpleDateFormat类是对语言环境敏感的。如果不使用Locale参数实例化SimpleDateFormat,它将根据默认的Locale格式化日期和时间。Pattern 和Locale都确定格式。对于相同的 Pattern,如果Locale变化,则SimpleDateFormat可能会格式化日期和时间。

在下面的示例代码中,Pattern 被硬编码在创建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

日期格式 Pattern 的语法

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

Symbol Meaning Presentation Example
G era designator Text AD
y year Number 2009
M 一年中的一个月 Literals 和数字 7 月&07
d 每月的一天 Number 10
h 上午/下午(1-12)小时 Number 12
H 一天中的小时(0-23) Number 0
m 一小时内 Number 30
s 分钟 Number 55
S millisecond Number 978
E 星期几 Text Tuesday
D 一年中的一天 Number 189
F 每月的星期几 Number 2 (7 月第二个星期三)
w 一年中的一周 Number 27
W 每月的周 Number 2
a am/pm marker Text PM
k 一天中的小时(1-24) Number 24
K 上午/下午(0-11)的小时 Number 0
z time zone Text 太平洋标准时间
' 为文本转义 Delimiter (none)
' single quote Literal '

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

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

Presentation 符号数 Result
Text 1 - 3 缩写形式(如果存在)
Text >= 4 full form
Number 要求最少位数 较短的数字用零填充(一年中,如果“ y”的计数为 2,则年份将被截断为 2 位数字)
Literals 和数字 1 - 2 number form
Literals 和数字 3 text form
首页