2016-01-28 16 views
7

、あなたが例えば、本当にクールなものを行うことができます:Joda時間:DateTimeComparator。 Java 8 Time Apiに似ているのは何ですか?ジョダ時間とともに

package temp; 

import org.joda.time.DateTime; 
import org.joda.time.DateTimeComparator; 
import org.joda.time.DateTimeFieldType; 

public class TestDateTimeComparator { 

    public static void main(String[] args) { 

     //Two DateTime instances which have same month, date, and hour 
     //but different year, minutes and seconds 

     DateTime d1 = new DateTime(2001,05,12,7,0,0); 
     DateTime d2 = new DateTime(2014,05,12,7,30,45); 

     //Define the lower limit to be hour and upper limit to be month 
     DateTimeFieldType lowerLimit = DateTimeFieldType.hourOfDay(); 
     DateTimeFieldType upperLimit = DateTimeFieldType.monthOfYear(); 

     //Because of the upper and lower limits , the comparator shall only consider only those sub-elements 
     //within the lower and upper limits i.e.month, day and hour 
     //It shall ignore those sub-elements outside the lower and upper limits: i.e year, minute and second 
     DateTimeComparator dateTimeComparator = DateTimeComparator.getInstance(lowerLimit,upperLimit); 
     int result = dateTimeComparator.compare(d1, d2); 

     switch (result) { 
     case -1: 
      System.out.println("d1 is less than d2"); 
      break; 
     case 0: 
      System.out.println("d1 is equal to d2"); 
      break; 
     case 1: 
      System.out.println("d1 is greater than d2"); 
      break; 

     default: 
      break; 
     } 
    } 
} 

私はこの例hereを見つけました。

私はJava Time APIを使用して同じ手順を実行したいと思いますが、残念なことに、私には類似のコンパレータは表示されません。

特定の日付と時刻のフィールドのみを比較することはできますが、Java Time APIでは他のフィールドを比較することはできますか?

+1

'Comparator.comparing(LocalDateTime :: getHour) 'を使用してコンパレータを作成し、この場合の時間だけを比較します。しかし、2つのフィールド間のすべてのクロノフィールドを比較するには、mmh ... – Tunaki

答えて

4

この動作の一部を手作業で少し複製することができます。汎用ヘルパーメソッドはComparatorsで提供されています。

Comparator<LocalDateTime> byMonth = comparing(LocalDateTime::getMonth); 

またはあなたの例のように、唯一の月、日、時間を比較して1:

我々 import static java.util.Comparators.comparing;、我々は唯一の月と比較 LocalDateTimesのコンパレータを定義することができると仮定すると

Comparator<LocalDateTime> byHourDayMonth = comparing(LocalDateTime::getMonth) // 
    .thenComparing(LocalDateTime::getDayOfMonth) // 
    .thenComparing(LocalDateTime::getHour); 

これは、手動で注文を決定する立場にあります...自動ではなく、もっと細かい制御が必要です。

関連する問題