2016-01-18 8 views
6

Я ищу эквивалентный способ Joda Time в Java 8, сравнивающий экземпляры org.joda.time.DateTime (с указанным часовым поясом), игнорируя секунды и миллисекунды от сравнений следующим образом.Сравнение экземпляров java.time.ZonedDateTime, игнорирующих секунды и миллисекундные моменты из сравнений в Java 8

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy hh:mm:ss:SSS a Z").withZone(DateTimeZone.forID("Asia/Kolkata")); 
DateTime first = formatter.parseDateTime("16-Feb-2012 12:03:45:999 AM +05:30"); 
DateTime second = formatter.parseDateTime("16-Feb-2012 12:03:55:999 AM +05:30"); 

DateTimeComparator comparator = DateTimeComparator.getInstance(DateTimeFieldType.minuteOfHour()); 
int compare = comparator.compare(first, second); 
System.out.println("compare : " + compare); 

сравнение возвращает 0 значения, что и объекты были считаются равными после игнорирования секунды и миллисекунды мгновения из сравнения.

полей величины меньше нижнего предела, указанного с DateTimeFieldType игнорируются здесь.

Что является эквивалентом способ сделать то же самое с помощью API Java времени в Java 8?

Честно говоря, мне не удалось добиться того же в Java 8 с моими попытками.

ответ

9

В качестве Java-8 введены ссылки на lambdas и методы, посвященные Comparator классы стали в основном ненужными, поэтому они отсутствуют в java.time. Вы можете написать вместо этого:

Comparator<ZonedDateTime> comparator = Comparator.comparing(
     zdt -> zdt.truncatedTo(ChronoUnit.MINUTES)); 

Полный пример:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss:SSS a X") 
     .withLocale(Locale.ENGLISH).withZone(ZoneId.of("Asia/Kolkata")); 
ZonedDateTime first = ZonedDateTime.parse("16-Feb-2012 12:03:45:999 AM +0530", formatter); 
ZonedDateTime second = ZonedDateTime.parse("16-Feb-2012 12:03:55:999 AM +0530", formatter); 
Comparator<ZonedDateTime> comparator = Comparator.comparing(
     zdt -> zdt.truncatedTo(ChronoUnit.MINUTES)); 
System.out.println(comparator.compare(first, second));