DateTimeFormatter ofPattern 不适用于 "L"
DateTimeFormatter ofPattern not working for "L"
我有一个 LocalDateTime 对象,我想格式化它,打印输出如下:
11 月 23 日星期二。因此,我使用了 DateTimeFormatter
这样的:
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("e dd. LLL")
但不幸的是我得到 Tue 23. 11 月份是数字而不是字母!?
正确的格式模式字符串是 E dd. MMM
。请原谅我的 Java 语法。
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("E dd. MMM", Locale.ENGLISH);
另外请记住为格式化程序指定所需的语言环境。
尝试一下:
LocalDate date = LocalDate.of(2021, Month.NOVEMBER, 23);
String formatted = date.format(DATE_FORMATTER);
System.out.println(formatted);
输出是期望的:
Tue 23. Nov
说明我的格式模式有何不同:
- 我使用大写
E
作为星期几的缩写。小写 e
应该给你星期几,比如 2
表示星期二。 eee
也应该适用于缩写。
- 我使用
MMM
作为月份的缩写。 LLL
适用于 独立 形式。某些语言使用不同形式的月份,具体取决于月份中是否存在日期。例如,一种语言可以单独使用月份的主格和带有日期数字的属格,November 和 of[= 之间有点不同61=]十一月。由于包含日期,因此不应在此处使用模式字母 L
。有趣的是,对于某些 而不是 的语言(如英语),当您指定 LLL
.[=58 时,Java 会为您提供数字=]
编辑:您问过:
How would that look for "November" fully written out? "MMM" works for
"Dec."
您在另一条评论中 link 阅读的文档给出了答案:
Text: The text style is determined based on the number of pattern letters used. Less than 4 pattern letters will use the short form
.
Exactly 4 pattern letters will use the full form
. …
所以使用 MMMM
而不是 MMM
:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("E dd. MMMM", Locale.ENGLISH);
Tue 23. November
文档 link:DateTimeFormatter
我有一个 LocalDateTime 对象,我想格式化它,打印输出如下:
11 月 23 日星期二。因此,我使用了 DateTimeFormatter
这样的:
val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("e dd. LLL")
但不幸的是我得到 Tue 23. 11 月份是数字而不是字母!?
正确的格式模式字符串是 E dd. MMM
。请原谅我的 Java 语法。
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("E dd. MMM", Locale.ENGLISH);
另外请记住为格式化程序指定所需的语言环境。
尝试一下:
LocalDate date = LocalDate.of(2021, Month.NOVEMBER, 23);
String formatted = date.format(DATE_FORMATTER);
System.out.println(formatted);
输出是期望的:
Tue 23. Nov
说明我的格式模式有何不同:
- 我使用大写
E
作为星期几的缩写。小写e
应该给你星期几,比如2
表示星期二。eee
也应该适用于缩写。 - 我使用
MMM
作为月份的缩写。LLL
适用于 独立 形式。某些语言使用不同形式的月份,具体取决于月份中是否存在日期。例如,一种语言可以单独使用月份的主格和带有日期数字的属格,November 和 of[= 之间有点不同61=]十一月。由于包含日期,因此不应在此处使用模式字母L
。有趣的是,对于某些 而不是 的语言(如英语),当您指定LLL
.[=58 时,Java 会为您提供数字=]
编辑:您问过:
How would that look for "November" fully written out? "MMM" works for "Dec."
您在另一条评论中 link 阅读的文档给出了答案:
Text: The text style is determined based on the number of pattern letters used. Less than 4 pattern letters will use the
short form
. Exactly 4 pattern letters will use thefull form
. …
所以使用 MMMM
而不是 MMM
:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("E dd. MMMM", Locale.ENGLISH);
Tue 23. November
文档 link:DateTimeFormatter