我正在尝试创建可以检查多种格式的日期/时间的东西,以查看它是否是有效的日期/时间,以便我可以处理它。处理它包括将日期/时间转换为标准化的东西,以便我的软件可以使用。问题是我必须以不同的方式进行检查,以尝试使用 SimpleDateFormat 检测日期,但确实很难获得每个品种。该项目与在日期列中解析具有潜在用户指定日期格式的 CSV 文件有关。有没有更好的办法?这是我现在正在做的事情:
public static boolean isDateValid(String dateString)
{
ArrayList<SimpleDateFormat> dateFormats = new ArrayList<SimpleDateFormat>();
dateFormats.add(new SimpleDateFormat("M/dd/yyyy"));
dateFormats.add(new SimpleDateFormat("dd.M.yyyy"));
dateFormats.add(new SimpleDateFormat("M/dd/yyyy hh:mm:ss"));
dateFormats.add(new SimpleDateFormat("dd.M.yyyy hh:mm:ss"));
dateFormats.add(new SimpleDateFormat("dd-M-yyyy hh:mm:ss"));
dateFormats.add(new SimpleDateFormat("M-dd-yyyy hh:mm:ss"));
dateFormats.add(new SimpleDateFormat("yyyy-M-dd hh:mm:ss"));
dateFormats.add(new SimpleDateFormat("dd.MMM.yyyy"));
dateFormats.add(new SimpleDateFormat("dd-MMM-yyyy"));
dateFormats.add(new SimpleDateFormat("M/dd"));
dateFormats.add(new SimpleDateFormat("M dd"));
dateFormats.add(new SimpleDateFormat("M y"));
for (SimpleDateFormat format : dateFormats)
{
try
{
format.setLenient(false);
Date date = format.parse(dateString);
return true;
}
catch (Exception e)
{
}
}
return false;
}
此外,我还尝试使用 apache commons 中的 DateUtils,但似乎我仍然需要循环浏览一堆日期。
public static boolean isDate(String dateString)
{
try
{
Date theDate = DateUtils.parseDate(dateString);
}
catch (Exception e)
{
System.out.println(e);
return false;
}
return true;
}
有什么想法或鼓励的话?