Java 如何验证字符串是否为YYYYMMDD格式?

Java 如何验证字符串是否为YYYYMMDD格式?,java,string,date,Java,String,Date,我有一个字符串,它以YYYYMMDD- public static void verifyInput(String input) { } 此处传递的输入将采用“YYYYMMDD”形式 如何验证此表单中传递的input字符串是否仅YYYYMMDD 我只需要验证它是否为YYYYMMDD此格式。。我不需要以这种YYYYMMDD格式获取当前日期,然后将其与ss进行比较 更新:- 我只需要验证字符串输入,看看它们是否为这种格式YYYYMMDD 这意味着,如果有人正在传递字符串hello,则该

我有一个字符串,它以
YYYYMMDD
-

public static void verifyInput(String input) {    


}
此处传递的输入将采用“YYYYMMDD”形式

如何验证此表单中传递的
input
字符串是否仅
YYYYMMDD

我只需要验证它是否为
YYYYMMDD
此格式。。我不需要以这种
YYYYMMDD
格式获取当前日期,然后将其与
ss
进行比较

更新:-

我只需要验证字符串输入,看看它们是否为这种格式
YYYYMMDD

这意味着,如果有人正在传递字符串
hello
,则该字符串不是此
YYYYMMDD
格式


如果有人正在传递此字符串
20130130
,则会按照此
YYYYMMDD
格式验证此字符串。

将其传递到格式字符串YYYYMMDD的SimpleDataFormat对象。

将字符串转换为日期:

SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDD");
Date date = sdf.parse(input);
使用RegExp(&):

(虽然它会检查有效的月和日数值,但不会检查当前月份是否只有28/30天。如果需要检查,可以添加该数值。)

您可以使用,这里有一个解决方案-

private static final java.text.SimpleDateFormat sdf = 
    new java.text.SimpleDateFormat("yyyyMMdd");

public static java.util.Date verifyInput(String input) {
  if (input != null) {
    try {
      java.util.Date ret = sdf.parse(input.trim());
      if (sdf.format(ret).equals(input.trim())) {
        return ret;
      }
    } catch (ParseException e) {
      e.printStackTrace();
    }
  }
  return null;
}

public static void main(String[] args) {
  String[] dates = new String[] { "20141031",
      "20130228", "20000229", "20000230" };
  for (String str : dates) {
    System.out.println(verifyInput(str));
  }
}
输出

Fri Oct 31 00:00:00 EDT 2014
Thu Feb 28 00:00:00 EST 2013
Tue Feb 29 00:00:00 EST 2000
null

你可以通过..来验证它

boolean validate(String s)
{
     if(s.length()!=8)
     return false;
     try{
          int year=Integer.parseInt(s.substring(0,4));
     }
     catch(Exception e)
     {
          return false;
     }
     try{
          int month=Integer.parseInt(s.substring(4,6));
     }
     catch(Exception e)
     {
          return false;
     }
     try{
          int date=Integer.parseInt(s.substring(6,8));
     }
     catch(Exception e)
     {
          return false;
     }
     if(month>12)
     return false;
     if(date>31)
     return false;
     return true;
 }

要扩展Neuron的答案:

 if (month < 1 || month > 12)
     return false;
 int days = 30;
 if (month == 2) {
     days = 28;
     if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))) days = 29;
 }
 else {
     if ((1 << month) & 0x15A2) days = 31;
 }
 if (date < 1 || date > days)
     return false;
 return true;
if(月<1 | |月>12)
返回false;
整日=30天;
如果(月份==2){
天数=28天;
如果((年份%4==0)和((年份%100!=0)| |(年份%400==0)))天=29天;
}
否则{
如果((1天)
返回false;
返回true;

您可以这样做:

private boolean validateDateFormat(String input) {
    if(input == null) {
        return false;
    }
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
    try {
        Date d = format.parse(input);
        logger.debug(d);
        return true;
    } catch(ParseException e) {
        return false;
    }
}
使用此方法对其进行单元测试:

@Test
public void TestDateValidation() {
    logger.info("\ntestDateValidation()");

    assertEquals(false, validateDateFormat("hello"));
    assertEquals(false, validateDateFormat(null));
    assertEquals(false, validateDateFormat(""));
    assertEquals(false, validateDateFormat("d20140228"));
    assertEquals(false, validateDateFormat("Feb 28, 2014"));

    assertEquals(true, validateDateFormat("20140228"));
    validateDateFormat("20140229");
    validateDateFormat("2014024000");

}
给出此输出:

Fri Feb 28 00:00:00 EST 2014
Sat Mar 01 00:00:00 EST 2014
Mon Jan 13 00:00:00 EST 2025

不幸的是,这两个奇怪的日期仍然被解析为真实日期,但根据您的要求,这似乎不是问题。

使用
yyyyMMdd
?input.matches(\\d{8})运行
SimpleDateFormat
测试输入是否由8位数字组成。验证年份和月份是否在范围内很容易,但验证月份的日期是否与月份一致(闰年为年份)更难。如果需要完全验证,使用日期转换器是有意义的。谢谢Elliott..现在有意义..我没有意识到
SimpleDateFormat
…今天学到了一些新东西..我又遇到了一个问题。看看你是否可以帮我解决..谢谢你的帮助..你需要将lenient设置为false(setLenient(false);)对于简单的日期格式,否则有时结果将无效,例如yyyy-mm-dd将使用错误的日期进行解析。+1。足够简单…谢谢B.J…现在有意义。我还遇到了一个问题。看看你是否可以帮我解决。谢谢你的帮助。你还应该检查月份<1和日期<1。你可能想学习。谢谢热舔这是一个建议…它与其他方法略有不同,但确实有效。我还遇到了一个问题。看看你是否能帮我。谢谢你的帮助。
@Test
public void TestDateValidation() {
    logger.info("\ntestDateValidation()");

    assertEquals(false, validateDateFormat("hello"));
    assertEquals(false, validateDateFormat(null));
    assertEquals(false, validateDateFormat(""));
    assertEquals(false, validateDateFormat("d20140228"));
    assertEquals(false, validateDateFormat("Feb 28, 2014"));

    assertEquals(true, validateDateFormat("20140228"));
    validateDateFormat("20140229");
    validateDateFormat("2014024000");

}
Fri Feb 28 00:00:00 EST 2014
Sat Mar 01 00:00:00 EST 2014
Mon Jan 13 00:00:00 EST 2025