【问题标题】:Formatting LocalDate in Java: What's the pattern for "March 26 2020"在 Java 中格式化 LocalDate:“2020 年 3 月 26 日”的模式是什么
【发布时间】:2021-03-22 02:05:59
【问题描述】:

我似乎想不出“2020 年 3 月 26 日”的模式(没有逗号)。有人可以帮忙吗?我试过DateTimeFormatter.ofPattern("MMMM dd yyyy")DateTimeFormatter.ofPattern("MMM dd yyyy")。任何帮助将不胜感激!

最小的可重现示例:

    String strDate = "March 26 2020";
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM dd uuuu");
    LocalDate date = LocalDate.parse(strDate, dtf);
    System.out.println(date);

在我的电脑上这会抛出

线程“主”java.time.format.DateTimeParseException 中的异常: 无法在索引 0 处解析文本“2020 年 3 月 26 日”

预期的输出是

2020-03-26

在格式模式中使用MMM,例外情况相同。

【问题讨论】:

    标签: java


    【解决方案1】:

    使用模式,MMMM dd uuuuLocale.ENGLISH

    演示:

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.util.Locale;
    
    class Main {
        public static void main(String[] args) {
            String strDate = "March 26 2020";
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM dd uuuu", Locale.ENGLISH);
            LocalDate date = LocalDate.parse(strDate, dtf);
            System.out.println(date);
        }
    }
    

    输出:

    2020-03-26
    

    【讨论】:

    • Locale.ENGLISH 是一个位置!
    • 我认为Locale.US 也可以。 Locale.ROOT,有趣的是,没有。
    • 确实很有趣,@MCEmperor,谢谢。在我的 Java 11 上,Locale.ROOT 产生并期望 Mar 26 2020。对我来说似乎是一个错误,尽管可能有一些我无法理解的原因。
    【解决方案2】:

    试试这个

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM' 'dd' 'yyyy", Locale.ENGLISH)
    

    为我工作得很好,输出:

    December 10 2020
    

    【讨论】:

    • 您不需要在MMMMdd 之间或ddyyyy 之间明确使用' ' 指定空格。您可以简单地放置空格而不使用单引号。
    • 我看到有时它会有所作为
    • @MichaelGantman 不,因为空间永远不会。无论如何,有些人确实推荐使用单引号,这可能是个人喜好问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多