在我的项目中,我需要检查日期字符串是否评估为正确的Date对象.我决定允许yyyy-MM-dd和日期格式[(年,月,日)和(年,月,日,小时,分)].我怎样才能检查它们是否有效?我的代码为"1980-01-01"和一些奇怪的日期(如3837.05.01)返回null,它们用逗号分隔一个字符串:
private Date parseDate(String date){
Date data = null;
// yyy-mm-dd
try {
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
df.setLenient(false);
df.parse(date);
return data;
}
catch (Exception e) {
try{
int[] datArr = parseStringForDate(date);
int len = datArr.length;
// year, month, day
if(len == 3){
return new Date(datArr[0], datArr[1], datArr[2]);
}
// year, montd, day, hours, mins
else if(len ==5){
return new Date(datArr[0], datArr[1], datArr[2], datArr[3], datArr[4]);
}
// year, month, day, hours, mins, secs
else if(len == 6){
return new Date(datArr[0], datArr[1], datArr[2], datArr[3], datArr[4], datArr[5]);
}
else {
return data;
}
}
catch (Exception f){
return data;
}
}
}
private int[] parseStringForDate(String s){
String[] sArr = s.split(",");
int[] dateArr = new int[sArr.length];
for(int i=0; i< dateArr.length; i++){
dateArr[i] = Integer.parseInt(sArr[i]);
}
return dateArr;
}
Run Code Online (Sandbox Code Playgroud)
我记得我必须从年份中减去1900,但我也看到那个月是不同的等等,我想避免从日期字符串中检查我的整数数组中的每个元素.是否可以在日历或日期对象中自动解析它们?
您可以为此不同的String格式构造SimpleDateFormat对象(null如果参数无法解析为有效日期,则返回):
// Initializing possibleFormats somewhere only once
SimpleDateFormat[] possibleFormats = new SimpleDateFormat[] {
new SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy,MM,dd"),
new SimpleDateFormat("yyyy,MM,dd,HH,mm") };
for (SimpleDateFormat format: possibleFormats)
{
format.setLenient(false);
}
// initializing ends
public Date parseDate(String date) {
Date retVal = null;
int index = 0;
while (retVal == null && index < possibleFormats.length) {
try {
retVal = possibleFormats[index++].parse(date);
} catch (ParseException ex) { /* Do nothing */ }
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)