Java SimpleDataFormat模糊匹配
我有密码:Java SimpleDataFormat模糊匹配,java,Java,我有密码: public List<Date> parse(String date) { // todo: for parsing List<Date> dateList = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat(); sdf.setLenient(true); for (String form
public List<Date> parse(String date) {
// todo: for parsing
List<Date> dateList = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setLenient(true);
for (String format: DATE_FORMATS) {
sdf = new SimpleDateFormat(format);
try {
Date dt = sdf.parse(date);
System.out.println("Success! "+format);
dateList.add(dt);
} catch (ParseException e) {
// TODO Auto-generated catch block
//System.err.println("failed!");
}
}
return dateList;
}
我得到的结果是:
Success! EEEE MMM dd hh:mm a z yyyy
Success! EEEE MMM yyyy hh:mm a z dd
为什么第二种模式与示例相匹配?任何启示都将受到高度赞赏
谢谢新对象创建将覆盖下面的代码
sdf.setLenient(true);
修改属性后创建对象。(由于以下原因,行上方无效)
现在,“宽大”将再次具有默认值
而不是使用像bellow这样的方法来动态地将模式设置为sdf
sdf.applyPattern(arg0);
您使用的是宽松的日期格式,允许超出范围的日期元素。如果不希望允许超出范围的元素,请使用非宽松的日期格式 例如,此代码仅使用提供的一种日期格式进行解析:
public List<Date> parse(String date) {
// todo: for parsing
List<Date> dateList = new ArrayList<>();
for (String format: DATE_FORMATS) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(false);
try {
Date dt = sdf.parse(date);
System.out.println("Success! "+format);
dateList.add(dt);
} catch (ParseException e) {
// TODO Auto-generated catch block
//System.err.println("failed!");
}
}
return dateList;
}
公共列表解析(字符串日期){
//todo:用于解析
List dateList=new ArrayList();
for(字符串格式:日期格式){
SimpleDataFormat sdf=新的SimpleDataFormat(格式);
sdf.setLenient(错误);
试一试{
日期dt=sdf.parse(日期);
System.out.println(“成功!”+格式);
添加日期列表(dt);
}捕获(解析异常){
//TODO自动生成的捕捉块
//System.err.println(“失败!”);
}
}
返回日期表;
}
我相信第二种格式正在解析提供的日期,即2012年8月29日的第2016天,当时处于宽松模式。您能否提供日期格式的项目。您正在打印
日期格式
。将它添加到代码中,这样我们就可以看到它。另外值得注意的是,OP代码中的第一个setLenient
无论如何都会被忽略,因为sdf
在循环中被重新初始化,但这是非常没有意义的,因为a)它被忽略了,b)默认值无论如何都是true
。@JasonC,是的,的确如此。
sdf.applyPattern(arg0);
public List<Date> parse(String date) {
// todo: for parsing
List<Date> dateList = new ArrayList<>();
for (String format: DATE_FORMATS) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(false);
try {
Date dt = sdf.parse(date);
System.out.println("Success! "+format);
dateList.add(dt);
} catch (ParseException e) {
// TODO Auto-generated catch block
//System.err.println("failed!");
}
}
return dateList;
}