【问题标题】:Java regular expression - YYYYMMDD [duplicate]Java 正则表达式 - YYYYMMDD [重复]
【发布时间】:2014-01-20 20:20:21
【问题描述】:

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

【问题讨论】:

  • Regex 在这种情况下不是最佳选择。

标签: java regex date datetime


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      就像 Jigar 建议的那样,最好使用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

      【讨论】:

        【解决方案4】:

        @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
        }
        

        只是关于正则表达式的一个评论:你想如何检查这样一个正则表达式中的公历日历规则?月份有不同的长度,有闰年等等。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-11
            • 2012-07-09
            • 2016-04-30
            • 1970-01-01
            • 2014-01-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多