首页 > 解决方案 > 如何只允许传递特定类型的格式化字符串?

问题描述

我需要确保用户输入以下格式的日期:mm/dd/yyy

我尝试使用一种简单的方法来验证给定的参数是否不为空或不为空,以检查它是否与所需的格式匹配,如果是,则将其设置为新日期。

public void setDate(String dateIn) {

  if ((dateIn != null) && !(dateIn.equals(""))) {
    if (dateIn.equals("%2d" + "/" + "%2d" + "/" + "%4d")) {
      validDate = dateIn;
    }
  }
}

问题出在我的第二个 if 语句中,我只需要弄清楚如何使该方法获取日、月和年的数字。

标签: javastring

解决方案


只需尝试解析日期。我正在使用java.timeJava 8 中引入的“新”api。这个 api 已经在 J​​DK 中经过了彻底的测试,并且是可行的方法(通常尝试自己做最少的工作,很有可能你有一个之前遇到的问题):

try {
    DateTimeFormatter.ofPattern("MM/dd/yyyy").parse(dateIn);
    // valid date
} catch(DateTimeParseException e) {
    // invalid date
}

推荐阅读