日期和时间格式由日期和时间模式字符串指定。
在日期和时间模式字符串中,未加引号的字母 'A'
到 'Z'
和 'a'
到 'z'
被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 ('
) 引起来,以免进行解释。"''"
表示单引号。
所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符 'A'
到 'Z'
和 'a'
到 'z'
都被保留):
字母 | 日期或时间元素 | 表示 | 示例 |
---|---|---|---|
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996 ; 96 |
M | 年中的月份 | Month | July ; Jul ; 07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday ; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -0800 |
模式字母通常是重复的,其数量确定其精确表示。
Number: 对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。
月份中的天数d测试1:
Calendar cal = Calendar.getInstance(); cal.set(1987, 0, 2, 3, 4, 5);// 设置时间为1987年1月2日3时4分5秒 Date d = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(); StringBuilder s = new StringBuilder(); for (int i = 0; i < 2; i++) { s.append("d"); sdf.applyPattern(s.toString()); System.out.println("" + s + "\t:" + sdf.format(d)); }
打印:
月份中的天数d测试2:
Calendar cal = Calendar.getInstance(); cal.set(1987, 0, 28, 3, 4, 5);// 设置时间为1987年1月28日3时4分5秒 Date d = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(); StringBuilder s = new StringBuilder(); for (int i = 0; i < 3; i++) { s.append("d"); sdf.applyPattern(s.toString()); System.out.println("" + s + "\t:" + sdf.format(d)); }
打印:
Year: 对于格式化来说,模式字母的数量小于4,则年份截取为 2 位数;否则将年份解释为 number。
年份y测试:
Calendar cal=Calendar.getInstance(); cal.set(1987, 1, 2, 3, 4, 5);//设置时间为1987年1月2日3时4分5秒 Date d=cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(); StringBuilder s = new StringBuilder(); for (int i = 0; i < 5; i++) { s.append("y"); sdf.applyPattern(s.toString()); System.out.println(""+s+"\t:"+sdf.format(d)); }
打印:
Month: 如果模式字母的数量为 3 或大于 3,则将月份解释为 text;否则解释为 number。
月份M测试:
Calendar cal = Calendar.getInstance(); cal.set(1987, 1, 2, 3, 4, 5);// 设置时间为1987年1月2日3时4分5秒 Date d = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(); StringBuilder s = new StringBuilder(); for (int i = 0; i < 4; i++) { s.append("M"); sdf.applyPattern(s.toString()); System.out.println("" + s + "\t:" + sdf.format(d)); } cal.set(1987, 11, 2, 3, 4, 5);// 设置时间为1987年12月2日3时4分5秒 System.out.println("******修改月份为12月********"); d = cal.getTime(); s.setLength(0); for (int i = 0; i < 4; i++) { s.append("M"); sdf.applyPattern(s.toString()); System.out.println("" + s + "\t:" + sdf.format(d)); }
打印:
Text: 对于格式化来说,如果模式字母的数量大于等于 4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。
参考文档:JDK API 1.6