2016-01-18 5 views
6

Ich suche nach einer äquivalenten Methode von Joda Time in Java 8, die Instanzen von org.joda.time.DateTime vergleicht (mit einer Zeitzone) ignoriert Sekunden und Millisekunden aus Vergleiche wie folgt.Vergleichen von Instanzen von java.time.ZonedDateTime das Ignorieren von Sekunden und Millisekunden aus Vergleichen in 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); 

Der Vergleich liefert 0 Bedeutung, dass sowohl die Objekte wurden Sekunden nach ignorieren gleich betrachtet und Millisekunden Zeitpunkt aus dem Vergleich.

Felder mit einer Größe unterhalb der mit DateTimeFieldType angegebenen unteren Grenze werden hier ignoriert.

Was ist der gleiche Weg, die gleiche Sache mit der Java Time API in Java 8 zu tun?

Um ehrlich zu sein, ist es mir in Java 8 mit meinen Versuchen nicht gelungen, das gleiche zu erreichen.

Antwort

9

Da Java-8 eingeführt Lambdas und Methodenreferenzen, dedizierte Comparator Klassen wurden weitgehend unnötig, so dass sie in java.time fehlen. Sie können stattdessen schreiben:

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

Komplettes Beispiel:

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

Versuchen ChronoUnit Klasse.

long minutes = ChronoUnit.MINUTES.between(first, second); 
Verwandte Themen