我有密码:
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;
}这被称为:
parse("Monday Aug 29 5:51 PM GMT 2016")我得到的结果是:
Success! EEEE MMM dd hh:mm a z yyyy
Success! EEEE MMM yyyy hh:mm a z dd为什么第二种模式与示例相匹配?任何开悟都是非常感激的。
谢谢
发布于 2016-08-30 04:04:58
您的下面代码将被新的对象创建覆盖。
sdf.setLenient(true);修改属性后创建对象。(由于下面的原因,行上端无用)
sdf = new SimpleDateFormat(format);//replace this code by applyPattern现在宽严相济又会有默认值。
而不是使用像下面这样的方法来动态地将模式设置为sdf。
sdf.applyPattern(arg0);发布于 2016-08-30 04:07:49
您正在使用宽松的日期格式,这允许超出范围日期元素。如果不希望超出范围的元素被允许,请使用非宽松的日期格式。
例如,此代码只使用提供的日期格式之一进行分析:
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;
}我认为第二种格式是将所提供的日期解析为0029年8月0029年8月26日这一宽松模式。
https://stackoverflow.com/questions/39218514
复制相似问题