Java正则表达式 - YYYYMMDD

时间:2014-01-03 07:48:23

标签: java regex date datetime

我正在阅读包含YYYYMMDD格式的行的文件。如何使用regular expressions检查这些行的有效性?谢谢。该应用程序是Java应用程序。

5 个答案:

答案 0 :(得分:8)

正则表达式是不可能的。您将如何考虑闰年?你应该尝试解析日期。如果parse抛出异常,则日期错误:

SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
f.setLenient(false);  <-- by default SimpleDateFormat allows 20010132
try {
   f.parse(str);
   // good
} catch (ParseExcepton e) {
   // bad
}

答案 1 :(得分:5)

您最好使用SimpleDateFormatsetLenient(false);来验证日期字符串

答案 2 :(得分:1)

像Jigar sugested一样,最好使用DateFormat

public static boolean isValidDate(String date) {
    try {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      sdf.setLenient(false);
      sdf.parse(date);
    }
    catch (Exception e) {
      return false;
    }
    return true;
  }

有用link

答案 3 :(得分:1)

@ EvgeniyDorofeev,@ JigarJoshi和@StinePike的答案是正确的。但我建议批量数据处理采用略有不同的方法来避免基于昂贵的ParseException的逻辑。

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setLenient(false);

for (String line : lines) { // lines from your source
  ParsePosition pos = new ParsePosition(0);
  Date date = sdf.parse(line, pos);
  boolean valid = (date != null);
  // here you can continue with processing the single line
  // can even evaluate the line number and error offset in line
}

关于正则表达式的一个评论:你如何在这样的正则表达式中检查格里高利历法规则?月份有不同的长度,有闰年等等。

答案 4 :(得分:0)

对于检查日期,正则表达式无效。但是,话虽如此,如果你真的想要正则表达式,请查看link