【问题标题】:Custom format for java.time.LocalDate is throwing DateTimeParseException [duplicate]java.time.LocalDate 的自定义格式抛出 DateTimeParseException [重复]
【发布时间】:2021-08-10 19:34:43
【问题描述】:

我想将日期格式 YYYY-MM-DD 解析为以下 MMM dd, yyyy。 这是我导致 DateTimeParseException 的部分代码 - >

DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("MMM dd, yyyy"); LocalDate localDate = LocalDate.parse("2002-10-01",dateTimeFormatter1);

当我尝试使用给定格式解析日期时的异常消息是: Method threw 'java.time.format.DateTimeParseException' exception. Text '2002-10-01' could not be parsed at index 0.

【问题讨论】:

  • 您的格式化程序用于输出模式。您需要 2 个格式化程序。一个用于解析,一个用于输出。您不能只使用 1 个格式化程序并期望它能够读懂您的想法。

标签: java java-time


【解决方案1】:

这是因为 2002-10-01 的格式为 YYYY-MM-DD,因此尝试使用格式 MMM dd, yyyy 解析(即转换为 LocalDate 对象)它是行不通的。

您需要两种格式来执行此操作:

DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("MMM dd, yyyy");

LocalDate localDate = LocalDate.parse("2002-10-01",dateTimeFormatter1);
String newRepresentation = dateTimeFormatter2.format(localDate);

System.out.println(newRepresentation);

【讨论】:

  • 我通过获取格式为 MMM dd, yyyy 的字符串对象没有任何问题。问题是我需要将它作为 MMM dd, yyyy 格式的 LocalDate 对象。因此,对于以下示例,我需要拥有 2002 年 10 月 1 日的 LocalDate 对象。亲切的问候
  • @JasminJaskoMerušić 听起来您希望LocalDate 对象知道它应该如何格式化。它没有(也不应该)。 DateTimeFormatter 的重点是将日期/时间对象转换为字符串,反之亦然。知道如何解析和格式化的是 DateTimeFormatter,而不是日期/时间对象。
【解决方案2】:

您的异常是由您指定的解析格式"MMM dd, yyyy" 与输入2002-10-01 不匹配引起的。

You commented:

我需要将它作为 MMM dd, yyyy 格式的 LocalDate 对象

LocalDate 没有“格式”。文本有格式,但LocalDate 不是文本。

LocalDate 类可以解析传入的字符串以生成LocalDate 对象。并且LocalDate 对象可以生成一个表示其值的字符串。但是LocalDate 对象本身不是这些字符串。 LocalDate 有它自己的内部日期表示,我们不关心它的细节。

你说:

我想解析一个日期格式 YYYY-MM-DD

该格式符合 ISO 8601 标准。 java.time 类在解析/生成文本时默认使用这些标准格式。所以不需要指定格式模式。

LocalDate ld = LocalDate.parse( "2002-10-01" ) ;

你说

…进入下面的 MMM dd, yyyy。

通常最好让 java.time 自动本地化,而不是硬编码特定格式。

Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( locale ) ;
String output = ld.format( f ) ;

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 2022-11-21
    • 2018-09-27
    • 2019-07-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多