【问题标题】:Java8 DateTimeFormatter parse date with both single digit and double digit day [duplicate]Java8 DateTimeFormatter用一位数和两位数的日期解析日期[重复]
【发布时间】:2015-11-12 07:43:17
【问题描述】:

我正在使用DateTimeFormatter 来解析日期:

private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate.parse("05/12/2015", parser); // it's ok
LocalDate.parse("5/12/2015", parser); // Exception

不幸的是,它不能正确解析带有单日数字的日期,例如 "5/12/2015"

我以this 阅读了其他一些帖子,但建议的解决方案对我不起作用。 我需要一种方法来解析可以有一位数或两位数日期的日期。

【问题讨论】:

  • “建议的解决方案对我不起作用” - 以什么方式?当您尝试“d/M/yyyy”时出了什么问题?它对我有用...请展示一个简短但完整的程序 工作。

标签: java java-8 java-time


【解决方案1】:

只需使用d 而不是dd - 这仍然允许前导0,但不需要它。我怀疑你也想在几个月内做同样的事情 - 有“1 或 2 位”天而不是几个月会很奇怪......

import java.time.*;
import java.time.format.*;

public class Test {
    public static void main(String[] args) throws Exception {
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("d/M/yyyy");
        System.out.println(LocalDate.parse("05/1/2015", parser));
        System.out.println(LocalDate.parse("05/01/2015", parser));
        System.out.println(LocalDate.parse("05/12/2015", parser));
        System.out.println(LocalDate.parse("5/12/2015", parser));
    }
}

【讨论】:

  • 注意:我在点击问题中的链接之前写了这个答案。看起来应该没问题,但是 OP 声称(等效)答案不起作用。我们会看看会发生什么。我可能会删除这个答案,或者需要修改它...
  • 感谢您的建议有效!
  • @drenda:那么这与您所说的在帖子中使用单个字母(d 代替 dd,M 代替 MM)的建议有什么不同没有为你工作?
  • 单个字母(d 而不是 dd....)工作正常,而不是在我链接的问题中,我指的是使用多个解析器解决问题的响应(第二个响应)。
  • @drenda:你有什么理由只看第二个解决方案(0 票)而不是第一个解决方案(6 票,和这个基本相同)?如果您要提及“建议的解决方案”,我希望这是一个被接受或投票最高的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多