2016-01-18 28 views
6

Tôi đang tìm cách tương đương Thời gian Joda trong Java 8 so sánh các trường hợp org.joda.time.DateTime (với một múi giờ được chỉ định) bỏ qua giây và mili giây từ so sánh như sau.So sánh các phiên bản của java.time.ZonedDateTime bỏ qua giây và mili giây từ các so sánh trong 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); 

Việc so sánh trả về 0 nghĩa rằng cả hai đối tượng đã được coi là bình đẳng sau khi phớt lờ giây và mili giây khoảnh khắc từ so sánh.

Các trường có độ lớn nhỏ hơn giới hạn dưới được chỉ định với DateTimeFieldType bị bỏ qua tại đây.

Cách tương tự để thực hiện điều tương tự bằng cách sử dụng API thời gian Java trong Java 8 là gì?

Thành thật mà nói, tôi đã không thành công để đạt được điều tương tự trong Java 8 với những nỗ lực của tôi.

Trả lời

9

Khi Java-8 giới thiệu tham chiếu lambdas và phương thức, có các lớp chuyên dụng Comparator trở nên không cần thiết, vì vậy chúng không có trong java.time. Bạn có thể viết thay vì:

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

Hoàn dụ:

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

Hãy thử ChronoUnit lớp.

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