【问题标题】:Unable to parse date YYYY-MM-DDThh:mm:ssTZD from string using DateUtils.parseDate无法使用 DateUtils.parseDate 从字符串中解析日期 YYYY-MM-DDThh:mm:ssTZD
【发布时间】:2021-11-24 07:15:37
【问题描述】:

将日期作为字符串:“2021-09-11T12:02:50-06:00Z”。 想要使用 apache DateUtils 转换为 java.util.Date:

    public static Date toDate (String dateString) throws ParseException {
        String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'TZD''Z'";
        return DateUtils.parseDate(dateString, new String[]{DATETIME_FORMAT});
    }

给出以下例外:

java.text.ParseException: Unable to parse the date: 2021-09-11T12:02:50-06:00Z
    at org.apache.commons.lang3.time.DateUtils.parseDateWithLeniency(DateUtils.java:388)
    at org.apache.commons.lang3.time.DateUtils.parseDate(DateUtils.java:302)
    at org.apache.commons.lang3.time.DateUtils.parseDate(DateUtils.java:279)

尝试将 DATETIME_FORMAT 设为 "yyyy-MM-dd'T'HH:mm:ss'TZD''Z'" 、 "yyyy-MM-dd'T'HH:mm:ss'TZD''Z'"、 "YYYY-MM-DD'T'hh:mm:ss'TZD'"

【问题讨论】:

  • 为什么要在格式字符串中添加'TZD''Z'?那是来自DateUtils 的东西吗? (我只知道/使用标准 Java 进行日期/时间操作,'' 表示那里的文字)
  • 也许您不应该在示例和格式中都使用“Z”?
  • ZonedDateTime dt = ZonedDateTime.parse("2021-09-11T12:02:50-06:00Z", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz'Z'")); 会起作用,但我猜你仍然使用过时的、有效弃用的 API 是有原因的
  • 我建议你不要使用Date。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time APIInstant。它还将解析您的字符串而不使用任何格式模式:Instant.parse("2021-09-11T12:02:50-06:00Z").
  • @user16320675 我不认为是'TZD' 后面跟着'Z'。由于双单引号表示文字单引号,因此它是文字字符串TZD'Z

标签: java datetime apache-commons-dateutils


【解决方案1】:

请在格式和日期字符串中进行此更正。

public static Date toDate (String dateString) throws ParseException {
        String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
        return DateUtils.parseDate(dateString, new String[]{DATETIME_FORMAT});
    }

并且在输入格式中不要使用冒号。 示例

 System.out.println(toDate  ("2021-09-11T12:02:50-0600"));

【讨论】:

  • 我们不能要求在解决方案中以工作格式获取日期,但我们可以尝试以工作格式更改给定日期。
  • 如果输入格式与指定的日期格式不匹配,那么您可以在使用 DateUtils 处理之前解析输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多