2017-05-12 19 views
0

私は入力欄に日付を入力するウィンドウをプログラミングしていますが、日や月が一貫しているかどうかをチェックする方法はわかりません(1日〜 12)日付が正しいかどうかを確認するにはどうすればいいですか?

String string = "26/03/2017"; 
    DateFormat format = new SimpleDateFormat("dd/MM/yyyy") ; 

    try { 
     Date date = format.parse(string); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

は、これは私が日付をフォーマットしていたコードの一部ですが、私は私が前に言ったことを確認する見当がつかない。

+0

正規表現を実装して日付形式 – Anksss

+0

を検証することができますが、正確に何をしたいですか? – davidxxx

答えて

0

string = "36/03/2017";のような文字列を解析しようとすると、正当な日付オブジェクトを返すことができますが、不正な値は文字列を尊重します。 は、そのような場合のために、あなたがフラグを設定することができ、今日の無効な文字列表現のための例外(例えば2017年2月29日)

をスローしますfalseにそのフラグを設定し、クラスてSimpleDateFormatの寛大フラグを使用することができます例外をキャッチして例外をキャッチする

String string = "36/03/2017"; 
DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
format.setLenient(false); 
try { 
    Date date = format.parse(string); 
    System.out.println(date); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

ありがとう、これは私のために働いた。 – gab

+0

あなたは大歓迎です! –

-1

正規表現を使用することをお勧めします。あなたの日付形式のために、それはのようなものでなければなりません:

(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d 

また、複数のパターンを見つけると、ここでそれらを検証することができます:http://html5pattern.com/Dates

+0

これは機能しません... 2016年2月29日は実際に有効な日付です! –

+0

もちろん、Gabの日付フォーマット(dd/MM/yyyy)でのみ動作します。私は彼がこのフォーマットに興味があると思っていたし、 "Feb 29 2016"は全く違う – Uata

0

たDateFormatは「寛大」という名前のプロパティがあり、デフォルト真です。 日付の有効性をチェックするには、format.setLenient(false)を設定する必要があります。不正な日付が解析されると、ParseExceptionが発生します。

0

2017答えです。

DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/uuuu") 
           .withResolverStyle(ResolverStyle.STRICT); 
    try { 
     LocalDate.parse(string, format); 
    } catch (DateTimeParseException e) { 
     System.out.println("Not a valid date: " + string); 
    } 

SimpleDateFormatが緩やかと非厳密厳密度2を有するが、DateTimeFormatterは、厳密スマート寛大な3を有しています。検証のために私は厳格なことを勧めます。スマートがデフォルトなので、明示的に設定する必要があります。

さらに多くの詳細がthis answerにあります。

関連する問題