在我的项目中,我需要检查日期字符串是否评估为正确的Date对象。我决定允许yyyy-MM- dd和Date格式[(年,月,日)和(年,月,日,时,分)。我如何检查它们是否有效?我的代码返回“ 1980-01-01”的null和一些奇怪的日期(例如3837.05.01),这些日期给出了用逗号分隔的字符串:
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; }
我记得我必须从年份中减去1900,但是我也看到月份不同,所以我想避免检查日期字符串中整数数组的每个元素。是否可以在Calendar或date对象中自动解析它们?
您可以像下面这样为不同的String格式构造SimpleDateFormat对象(null如果无法将参数解析为有效日期则返回):
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; }