5

Java/Android での日付比較に少し行き詰まっています

            DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm");
                Calendar now = Calendar.getInstance();
                Calendar c;

                c = Calendar.getInstance();
                c.set(settings.getInt("year", 0), settings.getInt("month", 0), settings.getInt("day", 0), settings.getInt("hour", 0), settings.getInt("minute", 0));

                views.setTextViewText(R.id.textView4, String.valueOf(c.getTime().before(now.getTime())));
                views.setTextViewText(R.id.textView2, String.format("%s - %s", df.format(c.getTime()), df.format(now.getTime())));

                int timeout = 0;
                while( c.getTime().before(now.getTime()) )
                {
                    c.add(Calendar.SECOND, 30);
                    c.add(Calendar.MINUTE, 12);
                    c.add(Calendar.HOUR_OF_DAY, 6);
                    isHigh = 1 - isHigh;
                    timeout++;
                    if( timeout >= 400 )
                        break;
                }
                views.setTextViewText(R.id.textView5, String.valueOf(c.getTime().before(now.getTime())));
                views.setTextViewText(R.id.textView3, String.format("%s - %s", df.format(c.getTime()), df.format(now.getTime())));

これの考え方は、保存された設定から開始日を取得し、現在の時刻を過ぎるまで時計に 6:12:30 を追加することです。

ただし、テキストボックスには次の情報が表示されます。

false : 09/07/12 04:20 - 11/08/12 00:00

false : 09/07/12 04:20 - 11/08/12 00:00

「before(2012 年 8 月 11 日)」を呼び出すと、2012 年 7 月 9 日が false を返すのはなぜですか?

「.before」を「.after」に変更すると、次のようになります。

true : 09/07/12 04:20 - 11/08/12 00:00

真: 20/10/12 15:40 - 11/08/12 00:00

意味がないようです。

私が間違っていることはありますか?ありがとう

4

3 に答える 3

6

「年」の設定が 2012 年ではなく 12 であるためではないかと思います。その場合、2012 年 9 月 7 日と 0012 年 11 月 8 日を比較することになりますが、日付形式が原因でわかりません。

診断目的で、フォーマット文字列を に変更して、"dd/MM/yyyy HH:mm"再試行してください。

于 2012-08-11T19:20:54.823 に答える
1

まあ、12 と 2012 の JDK で期待どおりに動作します。

DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm");
Calendar now = Calendar.getInstance();
Calendar c;
c = Calendar.getInstance();
c.set(12, 6, 9, 0, 0);
System.out.println(String.valueOf(c.getTime().before(now.getTime()))); 
System.out.println(String.format("%s - %s", df.format(c.getTime()), df.format(now.getTime())));

出力:- true 09/07/12 00:00 - 11/08/12 13:29

于 2012-08-11T19:37:33.090 に答える