多くの形式の日付/時刻をチェックして、処理できるように有効な日付/時刻かどうかを確認できるものを作成しようとしています。それを処理することは、日付/時刻を私のソフトウェアが動作するように正規化されたものに変換することから成ります。問題は、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;
}
アイデアや励ましの言葉はありますか?