2

YYYY/MM/DD HH:MM:SS前提条件のGoogleグアバクラスを使用して検証する必要がある文字列形式の日付があります。私はcheckArgument他の多くの場所でメソッドを使用しています。checkArgumentメソッドを使用して検証startDateして、この形式のみであることを確認しYYYY/MM/DD HH:MM:SS、そうでない場合は、メッセージとともに IllegalArgumentException をスローする方法を教えてください。

public Builder startDate(String startDate) {
    // validate startDate here using checkArgument if it is not valid then throw IllegalArgumentException.
    this.sDate = startDate;
    return this;
}

ここでcheckArgumentメソッドを使用するにはどうすればよいですか?

4

3 に答える 3

2

しないでください。書く

 try {
   new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(startDate);
 } catch (ParseException e) {
   throw new IllegalArgumentException(e);
 }

..これにより、Date解析されたものを保存して後で使用することもできます。(ただし、公平を期すためにjava.util.Date、ひどいAPIは避けるのが最善です-しかし、削除したように見える以前の質問でそれを使用していたことをほのめかしました。)

Joda Time を使用することになった場合は、http://joda-time.sourceforge.net/userguide.html#Input_and_Outputで、これらのニーズに合わせてこの回答を調整する方法が説明されています。

于 2016-01-09T00:10:40.407 に答える
0

正規表現に対して文字列全体をテストできます。

Preconditions.checkArguments(str.matches(VALID_DATE_REGEX));

スピードアップするために、パターンを一度コンパイルして呼び出しを反転することができます

Preconditions.checkArgument(VALID_DATE_REGEX.matcher(str).matches());

しかし、これはにおいです。このテキスト文字列をプログラム内で行ったり来たりするべきではありません。その形式が必要な場合は、ある時点でそれを日付に変換するためです。したがって、プログラムが無効な入力を受け入れてユーザーに報告できるかどうか、またはすぐに終了する必要があるかどうかを判断する必要があります。

後者は処理が簡単です。テキストをすぐに解析し、無効な入力に対して例外をスローします。それ以外の場合は、プログラムに検証ステップを導入してから、フローを停止し、入力内のブロッキング エラーと非ブロッキング エラーをユーザーに表示する方法をプログラムする必要があります。

于 2016-01-09T00:10:06.133 に答える