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())
);
}
}