2016-01-28 18 views
7

, örneğin, çok güzel bir şeyler yapabilir: Joda süresi: DateTimeComparator. Java 8 Time Api'de benzer nedir? Joda Zamanda ile

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; 
     } 
    } 
} 

Ben bu örneği here bulundu.

Java Time API ile aynı adımları uygulamak istiyorum ancak maalesef benzer bir Karşılaştırıcı göremiyorum.

Yalnızca belirli tarih ve saat alanlarını karşılaştırıp Java Time API ile başkalarını nasıl karşılaştırabilirim?

+1

Bu durumda yalnızca saati karşılaştırmak için Karşılaştırıcıları "Comparator.comparing (LocalDateTime :: getHour)" ile karşılaştırırsınız. Ama iki alan arasındaki tüm chrono alanları karşılaştırmak için, mmh ... – Tunaki

cevap

4

Bu davranışın bir kısmını, Comparators üzerinde sağlanan genel amaçlı yardımcı yöntemler ile biraz daha elle yineleyebilirsiniz.

: En örnekte olduğu gibi, sadece ay, gün ve saat karşılaştırır

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

veya bir:

biz import static java.util.Comparators.comparing;, sadece ay karşılaştırır LocalDateTimes üzerinde bir karşılaştırıcı tanımlayabilirsiniz varsayarsak

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

Bu, siparişe manuel olarak karar verme konumunda sizi otomatik olarak değil, biraz daha hassas kontrolle bırakıyor.