1

私の Android アプリケーションには、ユーザー定義の日付があります。この日付は、システム日付以降である必要があります。そうである場合、プロセスは続行されます。そうでない場合は、乾杯のメッセージが表示されます [ Follow up date should be greater than or equal to system date]

このコード セグメントを使用しました。

if (sys_date.after(df.parse((date.getText().toString())))) {
    Toast.makeText(getActivity(), "Follow up date should be greater than or equal to system date", Toast.LENGTH_SHORT).show();
} else {
    //process will continue
}

しかし、問題は、ユーザー定義の日付がシステム日付と同じであっても、トースト メッセージが表示されることです。

ここで何が起こっているのか、どうすればこの問題を解決できるのか、誰でも親切に説明してくれるでしょう。

事前にサンクス

4

4 に答える 4

6

私はこれを使用しています

public static boolean isAfterToday(int year, int month, int day)
{
    Calendar today = Calendar.getInstance();
    Calendar myDate = Calendar.getInstance();

    myDate.set(year, month, day);

    if (myDate.before(today)) 
    {
        return false;
    }
    return true;
}
于 2013-11-08T06:32:43.623 に答える
2

私は、このメソッドが日付のすべての可能な検証を検証するようにしました。それはあなたを助けることができます。

    public static final int DATE_EQUAL_TO_TODAY = 1;
    public static final int DATE_EQUAL_TO_GREATER_THAN_TODAY = 2;
    public static final int DATE_EQUAL_TO_LESS_THAN_TODAY = 3;
    public static final int END_DATE_GREATER_OR_EQUAL_TO_START_DATE=4;
    public static final int END_DATE_CAN_GREATER_THAN_TODAY=5;
    public static int DATE_SHOULD_BE_GREATER_THAN_TODAY=6;
    public static boolean dateVadidation(String date,int validationType)
    {
    String currentDate = showDateFormat(System.currentTimeMillis());
    SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
    if (validationType == DATE_EQUAL_TO_TODAY) {

        try {

            Date dtCurrent = df.parse(currentDate);


            Date dtCompareWith = df.parse(date);

            return dtCurrent.before(dtCompareWith)  || dtCurrent.after(dtCompareWith);

        } catch (Exception e) {
            Log.e("DATE_EQUAL_TO_TODAY", "Date Parsing Exception:" + e.getMessage());
        }
    }
    if(validationType == DATE_EQUAL_TO_GREATER_THAN_TODAY)
    {
        try {

            Date dtCurrent = df.parse(currentDate);


            Date dtCompareWith = df.parse(date);

            return dtCurrent.after(dtCompareWith);


        } catch (Exception e) {
            Log.e("DATE_EQUAL_TO_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
        }
    }
    if(validationType == DATE_EQUAL_TO_LESS_THAN_TODAY)
    {
        try {

            Date dtCurrent = df.parse(currentDate);


            Date dtCompareWith = df.parse(date);

            return dtCurrent.before(dtCompareWith);

        } catch (Exception e) {
            Log.e("DATE_EQUAL_TO_LESS_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());

        }
    }

    if(validationType==END_DATE_CAN_GREATER_THAN_TODAY)
    {
    try {


        Date dtTo = df.parse(date);

        Date dtCurrent = df.parse(currentDate);

        return dtTo.before(dtCurrent) ;

    }

    catch (Exception e) {
        Log.e("END_DATE_CAN_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
    }
    }

    if(validationType==DATE_SHOULD_BE_GREATER_THAN_TODAY)
    {
    try {


        Date dtTo = df.parse(date);

        Date dtCurrent = df.parse(currentDate);


        return (dtTo.after(dtCurrent) && (! dtTo.equals(dtCurrent))) ;

    }
    catch (Exception e) {
        Log.e("DATE_SHOULD_BE_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
    }
    }
    return false;

}
于 2013-11-08T04:48:52.687 に答える
0

時間部分を無視して日付を比較したい場合は、このSO の質問で洞察が得られます。Pankaj Kumarが投稿した SO の質問リンクも参照してください。

DateオブジェクトはComparableインターフェイスを実装します。したがって、 compareToメソッドを使用して、正確な日付の比較 (時間コンポーネントを含む) を行うことができます。もちろん、Date.getTime()メソッドが比較される 2 つの日付インスタンスに対して同じ long 値を返す場合に true を返すDate.equals()があります。

Jodaなどの成熟したライブラリを使用することをお勧めします。ここで説明されているいくつかのメモリの問題と回避策に注意してください。

于 2013-11-08T05:09:16.683 に答える
0
  1. 日付文字列をカレンダーに変換し、ミリ秒単位の長い時間を取得します。その変換を行うには、DateFormatter を使用する必要があります。

  2. 別の Calendar オブジェクトを取得し、別の long でミリ秒単位の時間を取得します。システム時間です。

  3. 上記の 2 つの long 変数を比較します。

それが役に立てば幸い。

于 2013-11-08T05:15:03.120 に答える