Java 日期到字符串解析/验证需要帮助

标签 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;
        }

最佳答案

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

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

这根本没有意义。您想要将String解析Date

您要做的第一件事是将String解析Date,这将检查是否字符串 的格式正确。完成此操作后,您需要检查解析的 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 因为它们可以自动验证文本本身,但这只是我(或来自的 JXDatePicker SwingLabs SwingX 库,因为我就是那么懒)

关于Java 日期到字符串解析/验证需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596436/

相关文章:

java - 从 Struts 1 迁移到 Struts 2 时自定义标签的支持

java - 如何在 java 中显示 native 文件系统的文件/文件夹的 "properties window"

c++ - boost::algorithm::join 的一个很好的例子

java - 即使没有重复的单词,如何从字符串中删除所有重复的单词?

Java:找到大写字母时拆分字符串

regex - Protobuf3 : String validation with regex

javascript - 简单的 JavaScript 复选框验证

java - 突出显示用于 JTable 过滤的表单元格中的子字符串

java - 默认的 jvm 错误日志位置是什么?

java - 是否有正则表达式可以防止输入 Javascript?