【问题标题】:Trying to parse a date throws parser error尝试解析日期会引发解析器错误
【发布时间】:2016-04-05 08:03:26
【问题描述】:

例如,我正在尝试解析类型为 23-May-2016 和 24-May 2016 的日期..

以下代码演示了如何解析日期。

  SimpleDateFormat format1 = new SimpleDateFormat("dd-MM-yyyy");
            Date validityDate = null;
            Date nextDueDate = null;
            try {
                validityDate = format1.parse(mValidityDate.getText().toString());
                nextDueDate = format1.parse(mNextDueDate.getText().toString());
                int validate = validate(validityDate, nextDueDate);
            } catch (Exception ex) {
                Toast.makeText(getApplicationContext(),ex.toString(),Toast.LENGTH_SHORT).show();
            }

以下是查找两个日期之间差数的代码。

public static int validate(Date valid, Date nextDueDate) {
        return (int) ((nextDueDate.getTime() - valid.getTime()) / (1000 * 60 * 60 * 24l));
    }

问题是,我在偏移量 3 处收到日期解析器错误。为什么会这样?

【问题讨论】:

    标签: android simpledateformat


    【解决方案1】:

    你需要使用两个不同的SimpleDateFormat

    对于日期 2016 年 5 月 23 日,您需要 new SimpleDateFormat("dd-MMM-yyyy");

    对于日期 2016 年 5 月 24 日,您需要 new SimpleDateFormat("dd-MMM yyyy");

    【讨论】:

      【解决方案2】:

      您正在使用“dd-MM-yyyy”模式,这意味着您正在尝试解析12-05-2016 形式的日期。

      如果需要解析诸如“12-May-2016”之类的日期,则必须使用 3M 字母表示月份,如下所示。 “dd-MMM-yyyy”。 但是,如果您解析日期“12-06-2016”,这将输出“12-Jun-2016”。

      如果您需要完整的月份,那么您应该使用 4M 字母。例如:“dd-MMMM-yyyy”。然后会输出12-June-2016

      【讨论】:

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