有关 java 的 FormatStyle 有趣的地方

JAVA 8 开始对 time 添加了不少东西,最常见的就是 LocalDate 这样的东西,其实还是多了点其他好玩的东西,比如说 java.time.format.FormatStyle 这个类。下面的代码中让我们来用 Local(语言, 国家) 之后格式化时间看看输出内容都有些什么。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class FormatStyleTest {
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
Arrays.asList(FormatStyle.FULL, FormatStyle.LONG, FormatStyle.MEDIUM, FormatStyle.SHORT)
.forEach(formatStyle -> {
System.out.println(String.format("--- FormatStyle.%s ---",
formatStyle.toString()));
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDate(formatStyle);
Arrays.asList(new String[]{"zh", "CN"},
new String[]{"zh", "HK"},
new String[]{"zh", "TW"},
new String[]{"en", "US"},
new String[]{"en", "UK"},
new String[]{"ja", "JP"})
.forEach(strs -> {
Locale locale = new Locale(strs[0], strs[1]);
System.out.println(String.format("%s %s -> %s",
strs[0],
strs[1],
ld.format(dtf.withLocale(locale))));
});
});

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
--- FormatStyle.FULL ---
zh CN -> 2018年7月23日 星期一
zh HK -> 2018年07月23日 星期一
zh TW -> 2018年7月23日 星期一
en US -> Monday, July 23, 2018
en UK -> Monday, July 23, 2018
ja JP -> 2018年7月23日
--- FormatStyle.LONG ---
zh CN -> 2018年7月23日
zh HK -> 2018年07月23日 星期一
zh TW -> 2018年7月23日
en US -> July 23, 2018
en UK -> July 23, 2018
ja JP -> 2018/07/23
--- FormatStyle.MEDIUM ---
zh CN -> 2018-7-23
zh HK -> 2018年7月23日
zh TW -> 2018/7/23
en US -> Jul 23, 2018
en UK -> Jul 23, 2018
ja JP -> 2018/07/23
--- FormatStyle.SHORT ---
zh CN -> 18-7-23
zh HK -> 18年7月23日
zh TW -> 2018/7/23
en US -> 7/23/18
en UK -> 7/23/18
ja JP -> 18/07/23

即使是华语圈,出来的结果基本来说都不一样的,而 en US 跟 en UK 都是一样的。

顺便说一句,java 中格式化时间还是有点麻烦。

via java.time.format.FormatStyle を確認