【问题标题】:Java Unparseable Date ExceptionJava 不可解析日期异常
【发布时间】:2014-05-09 16:45:48
【问题描述】:

我试图用正斜杠替换连字符,但结果是unparseable date exception

    String test = "2014-04-01 05:00:00";
    Date date = new SimpleDateFormat("YYYY/MM/dd hh:mm:ss", Locale.ENGLISH).parse(test);
    System.out.println(date);

我有转换它的必要值,有人能告诉我为什么它会返回错误吗?另外我想在格式末尾附加一个am/pm marker,这可能吗?

【问题讨论】:

    标签: java date datetime simpledateformat


    【解决方案1】:

    您需要首先以正确的格式将String 解析为Date 作为输入String

    yyyy-MM-dd HH:mm:ss
    

    然后你可以使用 format() 以其他格式打印它

    yyyy/MM/dd hh:mm:ss
    

    不要指望Date类的toString()方法返回格式化值,它是固定实现

    【讨论】:

      【解决方案2】:

      来自SimpleDateFormat

      Letter   Date or Time Component <br />
        y      Year <br />
        Y      Week year
        H      Hour in day (0-23)
        h      Hour in am/pm (1-12)
      

      因此,请使用 yyyy 表示年份,使用 HH 表示一天中的几个小时。此外,您将字段分隔为 -,而不是 /

      Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).parse(test);
      

      这样做之后,正如@JigarJoshi 所怀疑的那样,您可以格式化您的Date 以查看另一种格式:

      String dateInDesiredFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss a", Locale.ENGLISH).format(date);
      

      或者写成一个完整的代码块:

      DateFormat parse = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH);
      DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss a", Locale.ENGLISH);
      
      String test = "2014-04-01 05:00:00";
      Date date = parse.parse(test);
      System.out.println(format.format(date));
      

      产生以下输出:

      2014/04/01 05:00:00 AM
      

      【讨论】:

      • 在解析格式字符串的末尾添加`a`开始解析AM/PM
      • @JasonSperske 从这段代码 sn-p 中没有必要。
      • 我认为 OP 想将日期从 - 格式化为 / 所以他首先需要解析然后格式化
      • 啊,我看到他们想将其添加到输出中
      • @JigarJoshi 然后 OP 需要使用两个 SimpleDateFormat 实例。
      【解决方案3】:
      String test = "2014-04-01 05:00:00";
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
      Date oldDate = formatter.parse(test);
      formatter.applyPattern("yyyy/MM/dd HH:mm:ss a");
      Date newDate = formatter.parse(formatter.format(oldDate));
      System.out.println(formatter.format(newDate));
      

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-11
        相关资源
        最近更新 更多