Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Datetimeoffset - Fatal编程技术网

Java 检查日期及其模式是否符合预期模式

Java 检查日期及其模式是否符合预期模式,java,date,datetimeoffset,Java,Date,Datetimeoffset,我有个约会,应该是字符串形式 //True String date ="2012-10-12 12:01:10.10.150"; String pattern = "yyyy-MM-dd hh:mm:ss.SSS"; //False String date ="2012-10-12 12:01:10.150"; String pattern = "yyyy-MM-dd hh:mm:ss"; 现在,我想知道date变量是否有一个满足给定字符串模式的正确日期。在上面的示例中,我显示的True/F

我有个约会,应该是字符串形式

//True
String date ="2012-10-12 12:01:10.10.150";
String pattern = "yyyy-MM-dd hh:mm:ss.SSS";

//False
String date ="2012-10-12 12:01:10.150";
String pattern = "yyyy-MM-dd hh:mm:ss";
现在,我想知道date变量是否有一个满足给定字符串模式的正确日期。在上面的示例中,我显示的True/False是预期结果

我已经尝试过SimpleDataFormat(如果它抛出ParseException),但对于第二个示例,它将不起作用

public boolean isValidDate(String date, String pattern) {
    if (date == null)
        return false;
    SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
    try {
        dateFormat.parse(date.trim());
    } catch (ParseException pe) {
        return false;
    }
    return true;
}

使用
yyyy-MM-dd hh:MM:ss
作为第二个日期的模式

String date = "2012-10-12 12:01:10";
String pattern = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date parse = sdf.parse(date);

大写字母
S
表示第二个字符串没有的毫秒

使用
yyyy-MM-dd hh:MM:ss
作为第二个日期的模式

String date = "2012-10-12 12:01:10";
String pattern = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date parse = sdf.parse(date);

大写字母
S
表示第二个字符串没有的毫秒

来自
SimpleDataFormat.parse()
Java文档:

…解析不一定要使用到结尾的所有字符 字符串

这意味着,如果您的日期比模式长,它仍将生成有效的
date
实例。另一方面(例如,您的第二个示例),模式比给定的日期字符串更长(更详细),因此它不会生成
日期。在第二个示例中使用此选项:

String pattern = "yyyy-MM-dd hh:mm:ss";

SimpleDataFormat.parse()
Java文档:

…解析不一定要使用到结尾的所有字符 字符串

这意味着,如果您的日期比模式长,它仍将生成有效的
date
实例。另一方面(例如,您的第二个示例),模式比给定的日期字符串更长(更详细),因此它不会生成
日期。在第二个示例中使用此选项:

String pattern = "yyyy-MM-dd hh:mm:ss";

我认为您需要同时使用正则表达式和SimpleDataFormat来实现您想要的

boolean validate(String date, String pattern) throws ParseException {
    String regex = pattern.replaceAll("\\w", "\\\\d").replace(".", "\\.");
    if (!date.matches(regex)) {
        return false;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    sdf.setLenient(false);
    try {
        sdf.parse(date);
    } catch (Exception e) {
        return false;
    }
    return true;
}

我认为您需要同时使用正则表达式和SimpleDataFormat来实现您想要的

boolean validate(String date, String pattern) throws ParseException {
    String regex = pattern.replaceAll("\\w", "\\\\d").replace(".", "\\.");
    if (!date.matches(regex)) {
        return false;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    sdf.setLenient(false);
    try {
        sdf.parse(date);
    } catch (Exception e) {
        return false;
    }
    return true;
}


使用正则表达式测试预期的模式如何使用SimpleDataFormat
?SimpleDataFormat dateFormat=新SimpleDataFormat(模式);然后我解析它。我尝试了你的代码,第一个日期/模式得到
true
,第二个日期/模式得到
false
。这不是你想要的吗?对不起…第二个例子不正确。现在我已经修改了。你能看看它吗。使用正则表达式测试预期的模式你是如何使用
SimpleDateFormt
?SimpleDateFormat dateFormat=new SimpleDateFormat(模式);然后我解析它。我尝试了你的代码,第一个日期/模式得到
true
,第二个日期/模式得到
false
。这不是你想要的吗?对不起…第二个例子不正确。现在我已经修改了。你能研究一下吗。这不是关于我想使用哪种模式。我想检查给定的模式是否满足字符串格式的给定日期。相反。检查输入是否满足模式。这就是我的问题。如何检查它?我的代码就是这样做的:它检查
date
是否匹配
pattern
。但是你的代码对我的第二个示例不起作用,对吗?我正在传递字符串date=“2012-10-12 12:01:10”;字符串模式=“yyyy-MM-dd hh:MM:ss.SSS”;但对我来说,它应该返回false。这与我想使用哪种模式无关。我想检查给定的模式是否满足字符串格式的给定日期。反之亦然。检查输入是否满足模式。这就是我的问题。如何检查它?我的代码就是这样做的:它检查
date
是否匹配
pattern
。但是你的代码对我的第二个示例不起作用,对吗?我正在传递字符串date=“2012-10-12 12:01:10”;字符串模式=“yyyy-MM-dd hh:MM:ss.SSS”;但是对我来说,它应该返回false。谢谢你的回答。我想你可能会感到困惑。我已经编辑了我的问题。我想要问题中的方法,这对于第二个例子来说是不正确的。谢谢你的回答。我想你可能会感到困惑。我已经编辑了我的问题。我想要问题中的方法,这对于第二个例子来说是不正确的。谢谢你的回答回答。是的,我想是的。但在这种情况下,我的日期和模式是动态的。这些都来自某个属性文件。所以如何处理这个要求。是的……这就是我要找的……但你能告诉我为什么要使用。最后替换(“.”,“\\”)吗?因为。是正则表达式中的元字符,表示任何字符,所以应该转义谢谢你的回答。是的,我想是的。但在这种情况下,我的日期和模式是动态的。这些都来自某个属性文件。所以如何处理这个要求。是的……这就是我要找的……但是你能告诉我为什么使用。替换(“.”,“\\”)最后?因为。是正则表达式中的元字符,表示任何字符,因此应将其转义