【问题标题】:How to check if a string is date?如何检查字符串是否为日期?
【发布时间】:2020-06-03 03:52:08
【问题描述】:

我有类似的字符串

"11-04-2015 22:01:13:053" or "32476347656435"

如何检查字符串是否为日期?
使用正则表达式检查字符串是否为数字

String regex = "[0-9]+";

【问题讨论】:

  • 使用日期函数代替正则表达式
  • @ashutosh 我相信这个问题涵盖了字符串到日期的转换,而不是验证。

标签: java regex


【解决方案1】:

其他人也是正确的

这是你的答案

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class date {
    public static boolean isValidDate(String inDate) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss:ms");
        dateFormat.setLenient(false);
        try {
            dateFormat.parse(inDate.trim());
        } catch (ParseException pe) {
            return false;
        }
        return true;
    }

    public static void main(String[] args) {

        System.out.println(isValidDate("20-01-2014"));
        System.out.println(isValidDate("11-04-2015 22:01:33:023"));

        System.out.println(isValidDate("32476347656435"));
    }
}

【讨论】:

  • 有多种日期格式,因此您必须检查各种格式,例如yyyy/MM/dd
  • 永远不要对数据流使用异常。它们会损害性能。
【解决方案2】:

java.time

是时候有人提供现代答案了。其他几个答案中提到的SimpleDateFormat 类是出了名的麻烦,幸运的是现在已经过时了。相反,现代解决方案使用 java.time,即现代 Java 日期和时间 API。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-uuuu HH:mm:ss:SSS");

    String stringToTest = "11-04-2015 22:01:13:053";

    try {
        LocalDateTime dateTime = LocalDateTime.parse(stringToTest, formatter);
        System.out.println("The string is a date and time: " + dateTime);
    } catch (DateTimeParseException dtpe) {
        System.out.println("The string is not a date and time: " + dtpe.getMessage());
    }

这个 sn-p 的输出是:

字符串是日期和时间:2015-04-11T22:01:13.053

假设字符串被定义为:

    String stringToTest = "32476347656435";

现在的输出是:

字符串不是日期和时间:无法在索引 2 处解析文本“32476347656435”

链接: Oracle tutorial: Date Time 解释如何使用 java.time。

【讨论】:

    【解决方案3】:

    有两种可能的解决方案:

    【讨论】:

      【解决方案4】:

      您可以使用 Apache Commons Validator。它提供了用于验证日期、时间、数字、货币、IP 地址、电子邮件和 URL 的验证框架。

      Maven 依赖:

      <dependency>
          <groupId>commons-validator</groupId>
          <artifactId>commons-validator</artifactId>
          <version>1.6</version>
      </dependency>
      

      例子:

      assertTrue(GenericValidator.isDate("2019-02-28", "yyyy-MM-dd", true))
      

      【讨论】:

      • 不幸的是,对于日期,它最终会尝试尝试 { parse } catch (ParseException) {} 作为其他解决方案
      【解决方案5】:

      最好的解决方案是实际尝试将其解析为带有DateTime.TryParse() 的日期。

      String d = "11-04-2015 22:01:13:053";
      
      DateTime dt = new DateTime();
      
      if (DateTime.TryParse(d, out dt)) { 
          /// yes, it's a date, do something here... 
      } else {
          // no, it's not a date, do something else here... 
      }
      

      【讨论】:

      • 此解决方案仅用于检查具有特定格式的字符串是否可以解释为有效日期。日期可以用多种方式编写,因此可能需要更智能的匹配例程。此外,一些表示日期的字符串可能有多种解释,例如“03/03/08”。是 2008 年 3 月 3 日 - 还是 2003 年 3 月 8 日?
      • 我相信DateTime.TryParse 是Java 无法访问的.NET 函数。而且我相信有人要求使用 Java 解决方案。
      猜你喜欢
      • 2020-06-23
      • 2011-11-18
      • 1970-01-01
      • 2011-02-26
      • 2018-06-15
      • 1970-01-01
      • 2012-06-17
      • 2011-10-06
      相关资源
      最近更新 更多