Customizing Formats
Version note:
上一节使用 预定义格式描述了DateFormat
类提供的格式化样式。在大多数情况下,这些 预定义格式已足够。但是,如果要创建自己的自定义格式,则可以使用SimpleDateFormat类。
下面的代码示例演示SimpleDateFormat
类的方法。您可以在名为SimpleDateFormatDemo的文件中找到示例的完整源代码。
About Patterns
创建SimpleDateFormat
对象时,请指定String
Pattern。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 |