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。谢谢你的回答。我想你可能会感到困惑。我已经编辑了我的问题。我想要问题中的方法,这对于第二个例子来说是不正确的。谢谢你的回答。我想你可能会感到困惑。我已经编辑了我的问题。我想要问题中的方法,这对于第二个例子来说是不正确的。谢谢你的回答回答。是的,我想是的。但在这种情况下,我的日期和模式是动态的。这些都来自某个属性文件。所以如何处理这个要求。是的……这就是我要找的……但你能告诉我为什么要使用。最后替换(“.”,“\\”)吗?因为。是正则表达式中的元字符,表示任何字符,所以应该转义谢谢你的回答。是的,我想是的。但在这种情况下,我的日期和模式是动态的。这些都来自某个属性文件。所以如何处理这个要求。是的……这就是我要找的……但是你能告诉我为什么使用。替换(“.”,“\\”)最后?因为。是正则表达式中的元字符,表示任何字符,因此应将其转义