2011-01-27 22 views
2

こんにちは 朝、正午、午後、夕方の場合、異なる動作をするアプリケーションを作成したいと考えています。 今、私はいくつかの変数を時間ごとに設定したいと思っています 例:noon = 12:00 今、私はそれらと現在の時刻を比較して、それが朝かどうかを見て、正午12時まで現在を計算したい時間。 ここでは、日付の異なるいくつかの例を見てきましたが、時間単位で比較したいと思います。Javaで時間と時間の操作を比較する

答えて

2

joda時間hoursBetweenを使用することも、Javaカレンダークラスを使用することもできます。私はJodaTimeの使用をお勧めします。

のJava Calendarクラスを使用して
  • Calendar future = Calendar.getInstance(); //future time 
        future.set(Calendar.YEAR, 2011); 
        future.set(Calendar.MONTH, 0); 
        future.set(Calendar.DATE,27); 
        future.set(Calendar.HOUR_OF_DAY,17); 
        //get current time 
        Calendar now = Calendar.getInstance(); 
        //time difference between now and future in hours 
        long hoursDiff = (future.getTimeInMillis() - now.getTimeInMillis())/(60 * 60 * 1000); 
        System.out.println("Difference in hours is ="+hoursDiff);//prints 2 since it's 3 pm here 
    

をこの日の光の節約に考慮し、ローカルタイムゾーンに対して比較しません。ジョダ時間hoursBetweenを使用して

  • DateTime futureDate = new DateTime(future.getTime()); 
    DateTime current = new DateTime(now.getTime()); 
    int difference = Hours.hoursBetween(current,futureDate).getHours(); 
    System.out.println("Difference in hours is ="+difference); 
    

また、このquestionこのquestionを見てください。

0

GregorianCalendarを使用してこれを行うことができます。新しいGregorianCalendarを作成し、月、日、年を一定の値に設定します。興味のある時間帯、つまり正午の午前12時に時刻を設定します。今すぐgetTimeInMillis()とその値を格納します。後で、引数なしの別のGregorianCalendarを作成して現在の時刻を取得することができます。月、日、年をベンチマーク値と同じ定数値に設定してから、getTimeInMillis()を再度比較して、基準時刻の前、等しい、または後であるかどうかを確認します。

2
Calendar cal=GregorianCalendar.getInstance(); 

    int hour = cal.get(Calendar.HOUR); 

次に時間を比較します。

これは、ローカルタイムゾーンの

1

java.time

他の回答が正しかったが、時代遅れのクラスを使用し動作します。 java.util.Date/.Calendarクラスは、Java 8以降に組み込まれたjava.timeフレームワークによって置き換えられました。

LocalTimeクラスは、日付がなく時間帯がない時間帯を表します。

"morning"、 "afternoon"などの定義にいくつかの定数を設定します。実際の仕事では、私はenumを使用します。しかし、ここではデモ用に単純な変数を使用します。

LocalTime noon = LocalTime.of(12 , 0); 

タイムゾーンは時刻を解釈するために重要です。時間帯は、特定の時間帯のコンテキストでのみ意味を持ちます。指定しない場合、JVMの現在のデフォルトタイムゾーンが自動的に自動的に適用されます。代わりに、常に明示的に希望/予想タイムゾーンを指定することを強くお勧めします。 ZonedDateTimeは、Instantとタイムゾーン(ZoneId)の組み合わせであると考えることができます。

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime now = ZonedDateTime.now(zoneId); 

我々は、その割り当てられた時間帯に応じてZonedDateTimeからLocalTimeを抽出することができます。

LocalTime nowLocalTime = now.toLocalTime(); 

目標時間と比較してください。

Boolean isMorning = nowLocalTime.isBefore(noon); 

秒の合計数とナノ秒単位で第二の分数として時間のスパンを表現するためにDurationクラスを使用します。

ZonedDateTime todayNoon = now.adjustInto(noon); 
Duration untilNoon = Duration.between(now , todayNoon); 

Duration::toStringのデフォルトの出力はPT38M2S三〇から八分2秒、ISO 8601の例で定義された形式の文字列です。

DurationをZonedDateTimeオブジェクトから取得すると、夏時間(DST)などの異常を正確に把握できます。むしろ一般的な24時間の計算を使用する場合はLocalTimeオブジェクトをDuration.betweenに渡してください。