1

日付があり、文字列のパターンと思われます。

//True
String date ="2012-10-12 12:01:10.10.150";
String pattern = "yyyy-MM-dd hh:mm:ss.SSS";

//False
String date ="2012-10-12 12:01:10.150";
String pattern = "yyyy-MM-dd hh:mm:ss";

ここで、日付変数に、文字列の特定のパターンを満たす適切な日付があるかどうかを知りたいと思いました。上記の例では、True/False が期待される結果です。

私はSimpleDateFormat(ParseExceptionがスローされた場合)で試しましたが、2番目の例では機能しません。

public boolean isValidDate(String date, String pattern) {
    if (date == null)
        return false;
    SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
    try {
        dateFormat.parse(date.trim());
    } catch (ParseException pe) {
        return false;
    }
    return true;
}
4

3 に答える 3

2

あなたが望むものを達成するには、正規表現と SimpleDateFormat の両方を使用する必要があると思います

boolean validate(String date, String pattern) throws ParseException {
    String regex = pattern.replaceAll("\\w", "\\\\d").replace(".", "\\.");
    if (!date.matches(regex)) {
        return false;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    sdf.setLenient(false);
    try {
        sdf.parse(date);
    } catch (Exception e) {
        return false;
    }
    return true;
}
于 2013-04-17T09:42:47.537 に答える