6

現在および将来の日付のみを取得する日付の検証を試みていますが、日付が古い場合は表示されるはずです

日付が現在より古い

現在の日付も許可したい

日付が現在より古い

しかし、私は次のような出力を期待しています

日付は、今日のように givenDate の将来の日です。

以下は私が試してきたコードです:

    Date current = new Date();
    String myFormatString = "dd/MM/yy";
    SimpleDateFormat df = new SimpleDateFormat(myFormatString);
    Date givenDate = df.parse("15/02/13");
    Long l = givenDate.getTime();
    //create date object
    Date next = new Date(l);
    //compare both dates
    if(next.after(current) || (next.equals(current))){
        System.out.println("The date is future day");
    } else {

        System.out.println("The date is older than current day");
    }

ここで 15/02/13 で確認すると、現在よりも古いものとして表示されます。私の方法は間違っていますか? または、より良い方法はありますか?

4

5 に答える 5

9

if(next.after(current) && (next.equals(current)))厳密に後に AND を同時に等しくするnextことはできないため、常に false です。currentcurrent

あなたはおそらく次のことを意味していました:

if(next.after(current) || (next.equals(current)))ORで。

于 2013-02-15T10:21:56.010 に答える
6
于 2016-10-22T22:04:19.463 に答える
3

assyliasが指摘した論理エラーとは別に:

時間を指定しないのでgivenDate、例では「15/02/13 00:00:00.000」です。さて、その日付を同じ日の実際のタイムスタンプ (別名「今」) と比較すると、givenDateほとんどの場合、「今」よりも「古い」です。

その日の最後のミリ秒に設定givenDateすると、「等しい」テストは必要ありません。

于 2013-02-15T10:28:50.353 に答える
2

このコードには少なくとも 1 つのバグがありますが、どのように例外がスローされるのかわかりません。ステートメント:

if(next.after(current) && (next.equals(current))){

trueおそらく、next.after(current)next.equals(current)の両方が同時に真ではないため、は に評価されることはありません。

あなたはおそらく次のように書くつもりでした:

if(next.after(current) || (next.equals(current))){

また、通常は、少なくともエラーの具体的な詳細を含めることをお勧めします: 例外がスローされる正確な行 (それが本当に意図したものである場合)、および正確な出力 (その出力が例外)どのような入力が与えられましたか?

于 2013-02-15T10:25:38.247 に答える