1
 public static void main(String[] args) throws ParseException {
        List<String> strd = new ArrayList<>();
        List<Date> date = new ArrayList<>();
        strd.add("Sun May 11 03:17:40 UTC 2009");
        strd.add("Wed Jun 11 03:17:40 UTC 2008");
        strd.add("Mon May 11 03:17:40 UTC 2009");
        strd.add("Mon Jun 11 03:17:40 UTC 2009");
        strd.add("Sun Jun 11 03:17:40 UTC 2009");
        List<Character> letters = new ArrayList<>();
        char letter;
        for (letter = 'A'; letter <= 'Z'; letter++) {
            letters.add(letter);
        }
        List<String> dateToChar = new ArrayList<>();

        for (int j = 0; j < strd.size(); j++) {
            try {
                String strDate = strd.get(j);
                // String strDate = "Mon May 11 03:17:40 UTC 2009";
                SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
                Date dateStr = formatter.parse(strDate);
                String formattedDate = formatter.format(dateStr);
                System.out.println("Date is ==>" + formattedDate);
                Date date1 = formatter.parse(formattedDate);
                date.add(date1);
            } catch (ParseException e) {
                System.err.print(e);
            }
        }

        for (int k = 0; k < date.size(); k++) {
            for (int h = 1; h < date.size(); h++) {
                if (k != h && k < h) {
                    if (date.get(k).equals(date.get(h))) {
                        System.out.println("Equal dates");                        
                    } else {

                        System.out.println("Not Equal dates");
                    }
                }
            }
        }        
    }
}

私の問題は、解析を行うと、出力が次のようになることです。

Date is ==>Mon May 11 03:17:40 UTC 2009
Date is ==>Wed Jun 11 03:17:40 UTC 2008
Date is ==>Mon May 11 03:17:40 UTC 2009
Date is ==>Thu Jun 11 03:17:40 UTC 2009
Date is ==>Thu Jun 11 03:17:40 UTC 2009
Not Equal dates
Equal dates
Not Equal dates
Not Equal dates
Not Equal dates
Not Equal dates
Not Equal dates
Not Equal dates
Not Equal dates
Equal dates

なんで?理由がわからない!最後の日付は間違っていますが、最後の日付だけです。たとえば、日付を変更すると、出力が再び間違っています。

4

3 に答える 3

0

曜日は日付パーサーで使用されていないため、印刷結果は正しいように見えます。2 つの文字列の唯一の違いが曜日である場合、それらは同じ日付値に解析されます。

最初のパススルー ループ:

"Sun May 11 03:17:40 UTC 2009" vs "Wed Jun 11 03:17:40 UTC 2008" == not equal month
"Sun May 11 03:17:40 UTC 2009" vs "Mon May 11 03:17:40 UTC 2009" == equal (DoW ignored)
"Sun May 11 03:17:40 UTC 2009" vs "Mon Jun 11 03:17:40 UTC 2009" == not equal month
"Sun May 11 03:17:40 UTC 2009" vs "Sun Jun 11 03:17:40 UTC 2009" == not equal month

2 番目のパススルー ループ:

"Wed Jun 11 03:17:40 UTC 2008" vs "Mon May 11 03:17:40 UTC 2009" == not equal month
"Wed Jun 11 03:17:40 UTC 2008" vs "Mon Jun 11 03:17:40 UTC 2009" == not equal year
"Wed Jun 11 03:17:40 UTC 2008" vs "Sun Jun 11 03:17:40 UTC 2009" == not equal year

3 番目のパススルー ループ:

"Mon May 11 03:17:40 UTC 2009" vs "Mon Jun 11 03:17:40 UTC 2009" == not equal month
"Mon May 11 03:17:40 UTC 2009" vs "Sun Jun 11 03:17:40 UTC 2009" == not equal month

4 番目と最後のパススルー ループ:

"Mon Jun 11 03:17:40 UTC 2009" vs "Sun Jun 11 03:17:40 UTC 2009" == equal (DoW ignored)
于 2012-11-16T00:34:09.693 に答える
0

あなたはあなた自身の意見に惑わされていると思います:

strd.add("Sun May 11 03:17:40 UTC 2009");
strd.add("Mon May 11 03:17:40 UTC 2009");

2009 年 5 月 11 日は月曜日でした。私の知る限り(ただし、これに関するソースは見つかりません)、曜日は月の日で上書きされます。したがって、日曜日は月曜日に解析された後に変更されます。

その後、すべてが正しく見えます。ループ中に、日付が等しい唯一の場所は次のとおりです。

k=0; h=2;
Date is ==>Mon May 11 03:17:40 UTC 2009

そしてループ内:

k=3; h=4; 
Date is ==>Thu Jun 11 03:17:40 UTC 2009

意図的にこれを行ったかどうかはわかりませんが、1 つの日付に2008 年があります。

Date is ==>Wed Jun 11 03:17:40 UTC 2008
于 2012-11-16T00:22:52.637 に答える
0

間違った日付については、使用した日付の名前が有効な日ではないためです。最後の例を見てみましょうSun Jun 11 03:17:40 UTC 2009。カレンダーで調べたら、Thuその日だった。パーサーはこれを認識し、正しい日を出力します。

List dateこれで、ループは、ステップごとに実行してもエラーは発生しません。それ自体で をチェックするため、出力が正しいことがわかります。

最後に、Java 6 以前を使用している場合、コード内のキャストにいくつかの問題があります。

List<Date> date = new ArrayList<>();

は実際には有効ではなく、代わりに有効にする必要があります

List<Date> date = new ArrayList<Date>();

(これがJava 7で有効であることを指摘してくれた@Reimeusに感謝します)

于 2012-11-16T00:38:16.797 に答える