【问题标题】:Getting java.text.ParseException: Unparseable date: "20201116135151"获取 java.text.ParseException:无法解析的日期:“20201116135151”
【发布时间】:2020-11-26 10:44:51
【问题描述】:

我正在尝试解析从 API 返回的日期。示例日期类似于 “20180314110343”。 API 文档说日期格式是 yyyymmddhh24miss。但是,当我尝试使用这种格式进行解析时,出现以下错误。

java.lang.IllegalArgumentException: Illegal pattern character 'i'

我尝试使用以下代码进行解析。但是,我得到了一个 java.text.ParseException。解析此日期的正确方法是什么?

代码

DateFormat format = new SimpleDateFormat("yyyymmddhh24mmss");
String.valueOf(format.parse(dateVariable)

错误

java.text.ParseException: Unparseable date: "20201116135151"

【问题讨论】:

  • 请提供您正在讨论的 API 文档的链接。 “yyyymmddhh24miss”不明确。
  • 查看the API documentation 以获得SimpleDateFormat。您的格式字符串错误。请注意,大写和小写很重要。请注意,mm 表示分钟,而不是月。你可能想要yyyyMMddHHmmss。注意hh24无效,mi也无效。
  • @Kabilesh:这很可能不是文档中的错误 - 您很可能假设某件事的文档适用于SimpleDateFormat。你不应该假设每个平台上的格式字符串都是相同的等等。
  • 另请注意,接受的答案使用来自java.time 包的DateTimeFormatterLocalDateTime,而不是过时的DateSimpleDateFormat 类。你也应该使用它。 See here why the old API is not good.
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateTimeDateTimeFormatter

标签: java date parsing


【解决方案1】:

格式模式不适合您的日期,或者 Api 文档中可能存在拼写错误,但要解析您发布的日期,您可以使用 yyyyMMddHHmmssuuuuMMddHHmmss

LocalDateTime ldt = LocalDateTime.parse(str, DateTimeFormatter.ofPattern("uuuuMMddHHmmss"));

输出

2018-03-14T11:03:43

【讨论】:

    【解决方案2】:

    我能够通过以下方式解析您的日期。

     String dateVariable = "20201116135151";
     DateFormat format = new SimpleDateFormat( "yyyyMMddHHmmss" );
    

    解析日期是

    2020 年 1 月 16 日星期四 13:51:51 AST

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多