2010-11-28 26 views
3

Javaで2つの日付を比較するにはどうすればよいでしょうか?java日付時刻比較2

今私はどのように我々は、コンピュータの時間に比べて次の思い付くためにどの時間を見つけることができます

10.00のような時間の配列、12.00、2.00、4.00

がありますか?

私のコンピュータの時刻は3.15ですが、次に4.00を表示するにはどうすればいいですか?

Date date = new Date(); 

答えて

12

java.util.DateはComparableインターフェイスを実装しています。それはあなたが非常に簡単にこのようなコードで2つのDateオブジェクトを比較することができることを意味:

if (date1.compareTo(date2) < 0) 
{ 
     System.out.println("date1 is before date2"); 
} 
else if (date1.compareTo(date2) > 0) 
{ 
    System.out.println("date1 is after date2"); 
} 
else 
{ 
    System.out.println("date1 is equal to date2"); 
} 
5

私はJoda Timeを使用します。興味のある時間ごとにLocalTimeを作成し、現在の時刻を取得するにはnew LocalTime()としてください。compareToまたはisBeforeisAfterのいずれかと比較することができます。

組み込みのDate/Calendarクラスの代わりにJoda Timeを使用すると、このような種類のコードを読みやすくなります。

+0

引用ジョーダ:「日付とカレンダーの使用は苦痛と苦痛をもたらす」 – darioo

0

JodaTimeは、これらのような質問のための標準的な答えのようですが、私は時間がなかった(しゃれが意図していない)まだチェックしますジョダから、そうここに私のカレンダーの提案です:

public static String getNextHour() { 
    Calendar c = new GregorianCalendar(); 
    int minsLeft = 60 - c.get(Calendar.MINUTE); 
    c.add(Calendar.MINUTE, minsLeft); 

    SimpleDateFormat sdf = new SimpleDateFormat("h:mm"); 
    return sdf.format(c.getTime()); 
} 
0

java.util.Dateクラスは、ニーズのために間違ったタイプです。そのクラスは、時刻がであり、時刻がであり、時間帯のみが必要です。 Javaの初期バージョンにバンドルされている古い日時クラスの中には、実際に時刻の値を表現するためのクラスはありません。 java.sql.Timeクラスはそのように振る舞いますが、ハックです。

java.time

java.timeフレームワークは、Java 8に内蔵以降れます。 Oracle Tutorialを参照してください。これらのクラスは、非常に成功したJoda-Timeライブラリに触発されました。 java.timeの機能の多くはback-ported to Jave 6 & 7であり、さらにadapted to Androidです。これらのクラスは、古い日時クラスに取って代わるものです。 a 広大な改善。

LocalTimeクラスは、日付がなく、タイムゾーンがない時間帯を表します。

Listなどのソートされたコレクションを使用して値を整理します。

List<LocalTime> times = new ArrayList<>(4); 
times.add(LocalTime.of(10 , 0); 
times.add(LocalTime.of(12 , 0); 
times.add(LocalTime.of(14 , 0); 
times.add(LocalTime.of(16 , 0); 

比較のサンプル時間を決めます。

LocalTime sample = LocalTime.of(15 , 15); // Quarter-hour past 3 in the afternoon. 

または、現在の時刻を取得します。 Specify a time zoneは、あなたのJVMのcurrent default time zoneによって暗黙的により信頼性が高いです。ループList

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

はあなたのサンプル時間よりも一日の後半にある最初の項目を検索します。比較するには、isAfterisBefore、またはequalsのメソッドを使用します。

LocalTime hit = null; 
for (LocalTime time : times) { 
    if (time.isAfter(sample)) { 
     hit = time; 
     break; // Bail-out of this FOR loop. 
    } 
} 
// Test if 'hit' is still null, meaning no appropriate value found. 
if (null == hit) { … } else (… }