1

SimpleDateFormat クラスと java.util.Date の compareto メソッドについて質問があります。

Date オブジェクトを作成してからフォーマットし、最後にフォーマットされた文字列を解析して元の日付と比較します。

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS");
Date originalDate = new Date();

String s = df.format(originalDate);
Date parsedDate = df.parse(s);

System.out.println("Original date: " + originalDate);
System.out.println("Formatted date: " + s);
System.out.println("originalDate compareTo parsedDate: " + originalDate.compareTo(parsedDate));

結果:

元の日付:Mon Jan 25 15:43:23 CET 2010 Formatted date: 2010.jan.25 03:43:23 868 originalDate compareTo parsedDate: 1

常に「1」になるのはなぜですか? 元の日付が解析された日付よりも大きいのはなぜですか?

4

3 に答える 3

4

これは 24 時間関連の問題だと思います。元の日付は 15 時なので午後 3 時ですが、解析された日付は 12 時間形式ですが、H形式指定子の代わりにh形式指定子を使用したためです。その後、時間が間違った文字列に変換されるため、解析されたときに午前 3 時と見なされるため、精度が失われます。試してみてください:03

DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
于 2010-03-09T15:07:47.420 に答える
1

単に日付を比較したい場合は、おそらく getTime() を使用して 2 つの値を比較する方が良いでしょう...

于 2010-03-09T15:18:58.347 に答える
1

午前/午後マーカーを追加すると機能します -a

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
于 2010-03-09T15:09:46.740 に答える