Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查字符串是否为日期?_Java_Regex - Fatal编程技术网

Java 如何检查字符串是否为日期?

Java 如何检查字符串是否为日期?,java,regex,Java,Regex,我吃的是像绳子一样的东西 "11-04-2015 22:01:13:053" or "32476347656435" 如何检查字符串是否为日期? 使用正则表达式检查字符串是否为数字 String regex = "[0-9]+"; 有两种可能的解决方案: 使用并尝试将字符串转换为日期。如果没有抛出ParseException,则格式正确 使用a解析字符串 其他人也是正确的 这是你的答案 import java.text.ParseException; import java.text.Si

我吃的是像绳子一样的东西

"11-04-2015 22:01:13:053" or "32476347656435"
如何检查字符串是否为日期?
使用正则表达式检查字符串是否为数字

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

有两种可能的解决方案:

  • 使用并尝试将
    字符串
    转换为
    日期
    。如果没有抛出
    ParseException
    ,则格式正确
  • 使用a解析
    字符串

  • 其他人也是正确的

    这是你的答案

    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"));
        }
    }
    

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

    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());
        }
    
    此代码段的输出为:

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

    假设字符串定义为:

        String stringToTest = "32476347656435";
    
    现在输出为:

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


    链接:解释如何使用java.time。

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

    Maven依赖项:

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

    使用日期函数而不是@ashutosh的RegExposible副本我相信这个问题涉及字符串到日期的转换,而不是验证。有多种日期格式,所以您必须检查各种格式,例如,
    yyyy/MM/dd
    切勿对数据流使用异常。它们会影响性能。此解决方案仅用于检查具有特定格式的字符串是否可以解释为有效日期。日期可以用多种方式书写,因此可能需要一个更智能的匹配例程。此外,一些表示日期的字符串可能有多种解释,例如“03/03/08”。是2008年3月3日还是2003年3月8日?我相信
    DateTime.TryParse
    是一个无法从Java访问的.NET函数。我相信我们需要一个Java解决方案。不幸的是,对于日期,它最终会像其他解决方案一样执行try{parse}catch(ParseException){}
    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.6</version>
    </dependency>
    
    assertTrue(GenericValidator.isDate("2019-02-28", "yyyy-MM-dd", true))