1

Java でスケジュール プログラムを作成しようとしていますが、現在の時刻と、現在の時刻が 2 つの設定時刻の間にあるかどうかを把握する必要があります。現在の時刻を把握するのは非常に簡単ですが、1 日の 2 つの時間の間にあるかどうかを判断するための提案はありますか。たとえば、木曜日の午前 9 時 33 分です。そのため、その時間に対応する週のどのセクションが予定されているかを把握する必要があります。週の設定期間と時間を比較するにはどうすればよいでしょうか。たとえば、{月曜は午前 9 時から 10 時まで、火曜は午後 3 時から 4 時まで、木曜は午前 8 時から 11 時まで}、そして、現在の時間がどの時間帯の間にあるかを確認しますか?

4

5 に答える 5

3

Date クラスを使用している場合は、次のようにすることができます

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm");
Date before = sdf.parse("07/05/2012 08:00");
Date after = sdf.parse("07/05/2012 08:30");
Date toCheck = sdf.parse("07/05/2012 08:15");
//is toCheck between the two?
boolean isAvailable = (before.getTime() < toCheck.getTime()) && after.getTime() > toCheck.getTime();

編集済み

Jonathan Drapeau が示唆しているように、compareTo を使用することもできます。

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm");
Date before = sdf.parse("07/05/2012 08:00");
Date after = sdf.parse("07/05/2012 08:30");
Date toCheck = sdf.parse("07/05/2012 08:15");
//is toCheck between the two?

「初期」と「最終」の日付範囲を含めたい場合

boolean isAvailable = before.compareTo(toCheck) >= 0 && after.compareTo(toCheck) <= 0

「初期」および「最終」の日付範囲を除外する場合

boolean isAvailable = before.compareTo(toCheck) > 0 && after.compareTo(toCheck) < 0

授業でも使えますCalendar


とにかく、カレンダーを使用することを強くお勧めします。それはかなり正確なクラスです

次のように確認できます。

Calendar cal1 = Calendar.getInstance(); // for example 12:00:00
Calendar cal2 = Calendar.getInstance(); // for exmaple 12:30:00
Calendar userTime = Calendar.getInstance(); // time to test: 12:15:00

if(user.after(cal1)&& user.before(cal2)){
    //... 
}

また、カレンダーの時間を初期化して設定するには、次のことを確認してください。

http://www.tutorialspoint.com/java/util/calendar_settime.htm

于 2013-09-12T13:41:16.967 に答える
3

日付がどの期間内にあるかを見つける効率的な方法は、クラスを作成することです。

public class TimePeriod implements Comparable<TimePeriod>{

  Date start;
  Date end;

  //Constructor, getters, setters

  boolean isIn(Date date) {
    return date.after(start) && date.before(end);
  }

  public int compareTo(TimePeriod other) {
    return start.compareTo(other.start);
  }
}

TimePeriod..次に、バイナリ検索を実行できる場所のソート済みリストを作成します。

編集:
これにより、二分探索が容易になる可能性があります。

int check(Date date) {
  if (isIn(date)) {
    return 0;
  } else if (start.after(date)) {
    return -1;
  } else if (end.before(date)) {
    return 1;
  } else {
    throw new IllegalStateException("Time has gone badly wrong");
  }
}
于 2013-09-12T13:44:49.940 に答える
2

エポック時間を使用することをお勧めします。

エポック時間の定義: http://en.wikipedia.org/wiki/Epoch_time

基本的に、特定の日付からの秒数です。1989 年と考えられます。3 時間 (現在の時間と比較する 2 時間) をエポック時間に変換すると、> < = などを使用できます。

エポック時間の取得については、ここを試してください (多くの言語があります): http://shafiqissani.wordpress.com/2010/09/30/how-to-get-the-current-epoch-time-unix-timestamp/

残念ながら、私のJavaが不足しているか、コードを提供します:)

編集:Javaエポックタイムコード:

long epoch = System.currentTimeMillis()/1000;

私の Java は下手で、私にはインタープリターがありません。このサイトを使用して、他の日付をエポック時間に変換することを提案することしかできません: http://www.epochconverter.com/

于 2013-09-12T13:43:05.320 に答える
1

Dateクラスにはbefore(Date)andafter(Date)メソッドがあります。

secondDate.before(firstDate)
于 2013-09-12T13:47:06.523 に答える
0

Calendar クラスを使用する場合、明示的なbefore()andafter()メソッドがあります。

Calendar startDate = ...
Calendar endData = ...
isBetween = currentDate.after(startDate) && currentDate.before(endDate);
于 2013-09-12T13:47:44.390 に答える