Java 为什么2010/08/15与M/d/yy匹配?
我有一个有效的日期格式数组,我想在用户输入的文本中检测:Java 为什么2010/08/15与M/d/yy匹配?,java,simpledateformat,Java,Simpledateformat,我有一个有效的日期格式数组,我想在用户输入的文本中检测: public static final DateFormat[] DATE_FORMATS = { new SimpleDateFormat("M/d/yy"), new SimpleDateFormat("M.d.yy"), new SimpleDateFormat("M-d-yy"), new SimpleDateFormat("M/d/yyyy"), new SimpleDateFormat(
public static final DateFormat[] DATE_FORMATS = {
new SimpleDateFormat("M/d/yy"),
new SimpleDateFormat("M.d.yy"),
new SimpleDateFormat("M-d-yy"),
new SimpleDateFormat("M/d/yyyy"),
new SimpleDateFormat("M.d.yyyy"),
new SimpleDateFormat("M-d-yyyy"),
new SimpleDateFormat("M/dd/yy"),
new SimpleDateFormat("M.dd.yy"),
new SimpleDateFormat("M-dd-yy"),
new SimpleDateFormat("M/dd/yyyy"),
new SimpleDateFormat("M.dd.yyyy"),
new SimpleDateFormat("M-dd-yyyy"),
new SimpleDateFormat("MM/d/yy"),
new SimpleDateFormat("MM.d.yy"),
new SimpleDateFormat("MM-d-yy"),
new SimpleDateFormat("MM/d/yyyy"),
new SimpleDateFormat("MM.d.yyyy"),
new SimpleDateFormat("MM-d-yyyy"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("MM.dd.yy"),
new SimpleDateFormat("MM-dd-yy"),
new SimpleDateFormat("MM/dd/yyyy"),
new SimpleDateFormat("MM.dd.yyyy"),
new SimpleDateFormat("MM-dd-yyyy"),
new SimpleDateFormat("yyyy/MM/dd"),
new SimpleDateFormat("yyyy.MM.dd"),
new SimpleDateFormat("yyyy-MM-dd")
};
通过下面的代码检测日期。this.searchTokens是用户输入文本中每个搜索词的数组
List<Date> datesFound = new ArrayList<Date>();
for (String token : this.searchTokens) {
Date date;
for (DateFormat dateFormat : DateHelper.DATE_FORMATS) {
try {
// Attempt to parse this token as a date.
date = (Date) dateFormat.parse(token);
datesFound.add(date);
break;
} catch (ParseException e) {
continue;
}
}
}
List datesFound=new ArrayList();
for(字符串标记:this.searchTokens){
日期;
用于(DateFormat DateFormat:DateHelper.DATE\u格式){
试一试{
//尝试将此令牌解析为日期。
date=(date)dateFormat.parse(token);
datesFound.add(日期);
打破
}捕获(解析异常){
持续
}
}
}
此代码验证任何日期的正确日期,并将其添加到my List对象中,格式如下的日期除外:
- yyyy/MM/dd
- yyyy.MM.dd
- 年月日
SimpleDataFormat
对象上调用.setLenient(false)
我认为M和MM仍然会匹配1或2个数字。如果这不是您想要的,我想您必须自己检查(使用正则表达式)。调用。在您创建的SimpleDataFormat
对象上设置Lenient(false)
我认为M和MM仍然会匹配1或2个数字。如果这不是你想要的,我想你必须自己(用正则表达式)检查一下。这对我很有效。单独使用.setLenient(false)并不能解决问题
for(int i=0; i < PropDateFormats.length; i++)
{
try
{
ParsePosition p = new ParsePosition(0);
PropDateFormats[i].setLenient(false);
PropagationDate = PropDateFormats[i].parse(_date,p);
if(p.getIndex() < _date.length())
{
log.trace("setPropagationDate.parse("+_date+") failed. Index=["+i+"[ as"+PropagationDate);
throw new ParseException(_date, p.getIndex());
}
log.trace("setPropagationDate.parse("+_date+") passed. Index=["+i+"[ as"+PropagationDate);
break;
}
for(int i=0;i
这对我很有效。单独使用.setLenient(false)并不能解决问题
for(int i=0; i < PropDateFormats.length; i++)
{
try
{
ParsePosition p = new ParsePosition(0);
PropDateFormats[i].setLenient(false);
PropagationDate = PropDateFormats[i].parse(_date,p);
if(p.getIndex() < _date.length())
{
log.trace("setPropagationDate.parse("+_date+") failed. Index=["+i+"[ as"+PropagationDate);
throw new ParseException(_date, p.getIndex());
}
log.trace("setPropagationDate.parse("+_date+") passed. Index=["+i+"[ as"+PropagationDate);
break;
}
for(int i=0;i