需要Java Date to String解析/验证帮助

时间:2015-04-13 00:55:49

标签: java string validation parsing date

我无法将java中的日期字段更改为字符串。它在我的输出toString中工作,但验证件无法识别。我的代码出了什么问题?除了真正的" M / d / yyyy"我不能让用户发布任何内容。约会,但我的验证不起作用。想法?

我已经发布了下面的开始日期代码,"结束日期"代码是一样的,但你认为你应该知道它存在。

非常感谢提前。

        String stringStartDate = this.txtStartDate.getText();
        SimpleDateFormat formatter = new SimpleDateFormat("M/d/yyyy");
        Date pStartDate = null;

        if (stringStartDate.length() > 0)
        {
            try {
                pStartDate = formatter.parse(stringStartDate);
            } catch (ParseException e1) {
                e1.printStackTrace();
            }

          if (pStartDate == null)
          {
            this.textArea.setText(this.textArea.getText() + "\n"
              + "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
            return;
          }
        }
        else
        {
          this.textArea.setText(this.textArea.getText() + "\n"
            + "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
          return;
        }

这是我的toString()...这是完美的。

    @Override 
    public String toString(){
    return "Pay Period Start Date = " +        simpleDateFormatMonthDayYear.format(this.pStartDate) + "\n" 
            + "Pay Period End Date = " + simpleDateFormatMonthDayYear.format(this.pEndDate) + "\n";

    }

从评论和我自己的反复试验中,我改变了一些事情,但现在都没有工作。这笔交易是什么?

        SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
        String stringStartDate = simpleDateFormatMonthDayYear.format(this.txtStartDate.getText());
        Date pStartDate = null;

        if (stringStartDate.length() > 0)
        {
            try {
                pStartDate = simpleDateFormatMonthDayYear.parse(stringStartDate);
            } catch (ParseException e1) {
                e1.printStackTrace();
            }

          if (pStartDate == null)
          {
            this.textArea.setText(this.textArea.getText() + "\n"
              + "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
            return;
          }
        }
        else
        {
          this.textArea.setText(this.textArea.getText() + "\n"
            + "Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");
          return;
        }

2 个答案:

答案 0 :(得分:2)

您正尝试使用SimpleDateFormat格式化String ...

SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
String stringStartDate = simpleDateFormatMonthDayYear.format(field.getText());

这根本没有意义。您希望parseString值设为Date

您要做的第一件事是parse StringDate的值,这将检查String格式是否正确。完成后,您需要检查已解析的Date的格式化版本是否等于字段中的文本,以查看日期是否实际有效...

SimpleDateFormat simpleDateFormatMonthDayYear = new SimpleDateFormat("M/d/yyyy");
try {
    Date date = simpleDateFormatMonthDayYear.parse(field.getText());

    if (date != null) {

        String formatted = simpleDateFormatMonthDayYear.format(date);
        if (!formatted.equals(field.getText())) {

            System.out.println("Date is not valid");

        }

    } else {

        System.out.println("Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");

    }
} catch (ParseException exp) {

    System.out.println("Error! Please enter a valid start date in the format M/d/yyyy (e.g. 1/2/2015)!");

}

但我只是使用JSpinnerJFormattedTextField,因为这些可以自动验证文本本身,但这只是我(或来自SwingLabs SwingX库的JXDatePicker ,因为我只是懒惰)

答案 1 :(得分:0)

您没有告诉我们该方法失败的测试。我通常在这样的代码中查找错误的方法是测试,找到失败的测试输入,使用调试器逐步执行它并查看失败的位置。

但是,这是一个提示。我注意到你正在使用" M / d / yyyy"对于格式。这是有问题的,因为有些月份有两位数,有些天有两位数。为什么不使用" MM / dd / YYYY"?