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 适用于 独立 形式。某些语言使用不同形式的月份,具体取决于月份中是否存在日期。例如,一种语言可以单独使用月份的主格和带有日期数字的属格,Novemberof[= 之间有点不同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