package net.time4j; import net.time4j.format.TemporalFormatter; import net.time4j.tz.OffsetSign; import net.time4j.tz.Timezone; import net.time4j.tz.ZonalOffset; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.text.ParseException; import java.text.ParsePosition; import java.util.Arrays; import java.util.List; import java.util.Locale; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class CompareZonalDateTimeTest { @Test public void comparison1() { ZonalOffset offsetBerlin = ZonalOffset.ofHours(OffsetSign.AHEAD_OF_UTC, 1); ZonalOffset offsetNewYork = ZonalOffset.ofHours(OffsetSign.BEHIND_UTC, 5); ZonalDateTime zdt1 = PlainTimestamp.of(2016, 2, 29, 17, 45).inZonalView(Timezone.of(offsetBerlin)); ZonalDateTime zdt2 = PlainTimestamp.of(2016, 2, 29, 20, 0).inZonalView(Timezone.of(offsetNewYork)); assertThat( zdt1.compareByMoment(zdt2) < 0, is(true)); assertThat( zdt1.compareByLocalTimestamp(zdt2) < 0, is(true)); } @Test public void comparison2() { ZonalOffset offsetBerlin = ZonalOffset.ofHours(OffsetSign.AHEAD_OF_UTC, 1); ZonalOffset offsetNewYork = ZonalOffset.ofHours(OffsetSign.BEHIND_UTC, 5); ZonalDateTime zdt1 = PlainTimestamp.of(2016, 2, 29, 17, 45).inZonalView(Timezone.of(offsetBerlin)); ZonalDateTime zdt2 = PlainTimestamp.of(2016, 2, 29, 16, 0).inZonalView(Timezone.of(offsetNewYork)); assertThat( zdt1.compareByMoment(zdt2) < 0, is(true)); assertThat( zdt1.compareByLocalTimestamp(zdt2) > 0, is(true)); } @Test public void comparison3() { ZonalOffset offsetBerlin = ZonalOffset.ofHours(OffsetSign.AHEAD_OF_UTC, 1); ZonalOffset offsetNewYork = ZonalOffset.ofHours(OffsetSign.BEHIND_UTC, 5); ZonalDateTime zdt1 = PlainTimestamp.of(2016, 2, 29, 17, 45).inZonalView(Timezone.of(offsetBerlin)); ZonalDateTime zdt2 = PlainTimestamp.of(2016, 2, 29, 9, 0).inZonalView(Timezone.of(offsetNewYork)); assertThat( zdt1.compareByMoment(zdt2) > 0, is(true)); assertThat( zdt1.compareByLocalTimestamp(zdt2) > 0, is(true)); } @Test public void streamMax() throws ParseException { List<String> dates = Arrays.asList("Tue, 29 Feb 2016 17:45:00 CET", "Tue, 29 Feb 2016 16:00:00 EST"); TemporalFormatter<Moment> formatter = Moment.formatter("EEE, dd MMM yyyy HH:mm:ss z", Platform.PATTERN, Locale.ENGLISH, ZonalOffset.UTC); ZonalDateTime maxDate = dates.stream() .map(s -> ZonalDateTime.parse(s, formatter, new ParsePosition(0))) .max(ZonalDateTime::compareByMoment) .get(); ZonalOffset offsetNewYork = ZonalOffset.ofHours(OffsetSign.BEHIND_UTC, 5); assertThat(maxDate.toTimestamp(), is(PlainTimestamp.of(2016, 2, 29, 16, 0))); assertThat(maxDate.toMoment(), is(PlainTimestamp.of(2016, 2, 29, 16, 0).at(offsetNewYork))); System.out.println(maxDate); } }