【发布时间】: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包的DateTimeFormatter和LocalDateTime,而不是过时的Date和SimpleDateFormat类。你也应该使用它。 See here why the old API is not good. -
我建议你不要使用
SimpleDateFormat和Date。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateTime和DateTimeFormatter。