3

ユーザーが入力した日付は、日、月、年ごとに個別にドロップダウンを使用しています。ユーザーが入力した日付を今日の日付と比較し、同じ日か将来の日かを確認する必要があります。時間には興味がなく、日付だけなので、時間の部分について少し混乱しています。Date クラスを使用せずにこれを解決する方法 (Date クラスの使用は推奨されません)。

ありがとう。

4

5 に答える 5

11

GregorianCalendar最初に、入力した日付を表すインスタンスを作成する必要があります。

Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17);

そして「今」のための1つ:

Calendar now = new GregorianCalendar();

これにより、日付が将来の場合は正の値になり、過去の場合は負の値になります。

user.compareTo(now);

userオブジェクトの構築に関するいくつかの注意:

  • 現在のJVMタイムゾーンを使用しているため、私の場合はCESTタイムゾーンの5月17日午前0時です。
  • 月に注意してください、それらは0ベースです
于 2012-05-16T18:14:56.523 に答える
0

このソリューションを試してください:

    int day = 0; //user provided
    int month = 0; //user provided
    int year = 0; //user provided
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.MONDAY, month);
    calendar.set(Calendar.DAY_OF_MONTH, day);
    long millisUser = calendar.getTime().getTime();
    long nowMillis = System.currentTimeMillis();
    if(nowMillis < millisUser) {
        ...
    }

上記は、日付が将来かどうかの確認です。

使用しても問題はありません。次を使用java.util.Date できます。

    int day = 0; //user provided
    int month = 0; //user provided
    int year = 0; //user provided
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR, year);
    calendar.set(Calendar.MONDAY, month);
    calendar.set(Calendar.DAY_OF_MONTH, day);
    Date userSubmit = calendar.getTime();
    Date now = new Date();
    if(userSubmit.after(now)) {
        ...
    }

しかし、日付を使用した流暢で簡単で直感的なAPIが必要な場合は、JodaTimeを使用することをお勧めします

于 2012-05-16T18:17:53.300 に答える
0

グレゴリオ暦を使用。2 つの日付の日数差を知りたい場合は、次のようなメソッドを作成できます。

  public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
  int elapsed = 0;
  GregorianCalendar gc1, gc2;
  if (g2.after(g1)) {
     gc2 = (GregorianCalendar) g2.clone();
     gc1 = (GregorianCalendar) g1.clone();
  }
  else   {
     gc2 = (GregorianCalendar) g1.clone();
     gc1 = (GregorianCalendar) g2.clone();
  }
  gc1.clear(Calendar.MILLISECOND);
  gc1.clear(Calendar.SECOND);
  gc1.clear(Calendar.MINUTE);
  gc1.clear(Calendar.HOUR_OF_DAY);
  gc2.clear(Calendar.MILLISECOND);
  gc2.clear(Calendar.SECOND);
  gc2.clear(Calendar.MINUTE);
  gc2.clear(Calendar.HOUR_OF_DAY);
  while ( gc1.before(gc2) ) {
     gc1.add(Calendar.DATE, 1);
     elapsed++;
  }
  return elapsed;

}

これにより、日数の差が返されます。

于 2012-05-16T18:21:14.217 に答える