【问题标题】:Unparsable date format [duplicate]不可解析的日期格式[重复]
【发布时间】:2020-11-16 18:06:35
【问题描述】:

我正在尝试解析日期字符串但收到此错误:

java.text.ParseException:无法解析的日期:“1997 年 10 月 1 日,上午 12:00:00”

这是我用来解析Date的方法:

public static Date parse(@NonNull String dateString, @NonNull String dateFormat) {
    val sdf = new SimpleDateFormat(dateFormat);
    sdf.setLenient(false);
    try {
        return sdf.parse(dateString);
    } catch (ParseException e) {
        return null;
    }
}

dateStringOct 1, 1997, 12:00:00 AMdateFormatMMM d, yyyy, HH:mm:ss a

为什么无法解析日期?

【问题讨论】:

  • 这段代码是否在使用非 EN 语言环境的机器上运行??
  • 应该是MMM dd, yyyy, HH:mm:ss a,因为天数可以是两位数?
  • 否(第一个问题)。 dd 似乎只是添加 0 填充。

标签: java date simpledateformat dateparser


【解决方案1】:

我猜你应该使用“h”而不是“H”。小写 h 表示 0-12 大写 1 表示 0-24。 总的来说应该是 MMM d, yyyy, hh:mm:ss a

【讨论】:

    【解决方案2】:

    如果将 SimpleDateFormat 更改为 DateTimeFormatter,则异常会显示错误:

    Caused by: java.time.DateTimeException: Conflict found: Field AmPmOfDay 1 differs from AmPmOfDay 0 derived from 12:00
    

    对于 12:00 时间,它预计是下午。如果您指的是午夜,则应该是 00:00 AM。

    【讨论】:

      【解决方案3】:

      您的代码抛出异常,因为字符串 Date 对于字符串模式无效,请查看文档 here

      具体来说,如果小时的格式介于 0-23 之间,则字符串为 HH,但如果您使用 1-12 AM,PM,则必须使用 hh

      这是一些参考代码:

      class Ideone
      {
          public static void main (String[] args) throws java.lang.Exception
          {
              Date x = parse("Oct 1, 1997, 12:00:00 AM", "MMM d, yyyy, hh:mm:ss a");
              System.out.println("X String: " + x); 
          }
          
          public static Date parse(String dateString, String dateFormat) {
              SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
              sdf.setLenient(false);
              try {
                  return sdf.parse(dateString);
              } catch (Exception e) {
                  System.out.println("E???");
                  return null;
              }
          }
      }
      

      如果你需要编辑,这里是ideone代码:

      https://ideone.com/ccwo2Y

      【讨论】:

        猜你喜欢
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多