2016-01-18 8 views
6

私は、Java 8で同等の方法で、秒とミリ秒を無視してorg.joda.time.DateTime(時間帯が指定されている)を比較しています以下のように比較した。Javaの比較の秒数とミリ秒数を無視してjava.time.ZonedDateTimeのインスタンスを比較する

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で指定された下限値より小さいフィールドは無視されます。

Java 8でJava Time APIを使用して同じことを行うのと同じ方法は何ですか?

私の試みでJava 8でも同じことを達成することはできませんでした。

答えて

9

Java-8でラムダとメソッド参照が導入されたので、専用の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)); 
7

ChronoUnitクラスを試してみてください。

long minutes = ChronoUnit.MINUTES.between(first, second); 
関連する問題