java.text.SimpleDateFormat 模式字符串
下表是 支持的时间模式的字符串
字符
含义
G
年代标志符
y
年
M
月
d
日
h
时在上午或下午(1~12)
H
时在一天中(0~23)
m
分
s
秒
S
毫秒
E
星期
D
一年中的第几天
F
一月中第几个星期几
w
一年中第几个星期
W
一月中第几个星期
a
上午/下午标记符
k
时在一天中(1~24)
K
时在上午或下午(0~11)
z
时区
给出一个较完整的例子如下
System.out.println(
new SimpleDateFormat("G y-M-d Z E H:m:s:S a").format(new Date())
);
输出结果为
公元 2018-11-26 +0800 星期一 18:3:42:236 下午
其中“公元”是年代,“ 2018-11-26”是格式化的年月日,“+0800” 是当前时区设置,“星期一”是星期,“17:32:11:099”是带毫秒的时间,“下午”是上下午标志。
java.text.SimpleDateFormat 模式扩展用法
上一章节的表格显示的是 java.text.SimpleDateFormat 模式的最基础的字符模式。这些模式实际上是可以有扩展的使用方法的。
字符
含义
MM
二位数字显示月份。位数不够前面补 0
MMM
用月份名称简写显示月份,例如 Nov
MMMMM
用月份名称全称显示月份,例如 November
HH
二位数字显示 24 小时制的小时,位数不够前面补 0
hh
二位数字显示 12 小时制的小时 ,位数不够前面补 0
mm
二位数字显示分钟,位数不够前面补 0
hh
二位数字显示秒 ,位数不够前面补 0
sss
三位数字显毫秒,位数不够前面补 0
非字母字符
例如-/*&^%()数字等,直接填充字符串位置
''
常量字符,在两个'符号之间的字符串会被当做常量直接显示
System.out.println(
new SimpleDateFormat("G y-MM-dd Z E HH:mm:ss:SSS a").format(new Date())
);
输出结果为
公元 2018-11-26 +0800 星期一 18:24:05:052 下午
如果我们要输出一些固定的含字母的字符串,则可以用下面的代码
System.out.println(
new SimpleDateFormat("'ygc time :'G y-MM-dd Z E HH:mm:ss:SSS a")
.format(new Date())
);
输出结果为:
ygc time :公元 2018-11-26 +0800 星期一 21:01:13:076 下午
在代码中通过指定 java.text.SimpleDateFormat 构造函数中的 java.util.Locale 对象来指定语言选项,然后用不同语言来格式化时间。
编写代码输出每种语言的时间字符串如下所示
Map languages = new LinkedHashMap<>();
for (Locale locale : Locale.getAvailableLocales()) {
languages.put(locale.getLanguage(), locale.getDisplayLanguage());
}
for (String key : languages.keySet()) {
if (key.length() > 0) {
System.out.println(languages.get(key));
System.out.println(
new SimpleDateFormat("G y-MMMMM-dd Z E HH:mm:ss:SSS a", new Locale(key))
.format(new Date())
);
}
}