package net.time4j.format.expert; import java.text.ParseException; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Locale; import net.time4j.Moment; import net.time4j.PlainDate; import net.time4j.PlainTimestamp; import net.time4j.TemporalType; import net.time4j.tz.OffsetSign; import net.time4j.tz.ZonalOffset; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class ChronoHierarchyTest { @Test public void historicExtension1() throws ParseException { ChronoFormatter<LocalDate> cf = ChronoFormatter.setUp(PlainDate.axis(TemporalType.LOCAL_DATE), new Locale("de", "SE")) .addPattern("d. MMMM, G yyyy", PatternType.CLDR).build().withLatinEraNames(); assertThat( cf.parse("30. Februar, AD 1712"), is(LocalDate.of(1712, 3, 11))); } @Test public void historicExtension2() throws ParseException { ChronoFormatter<Moment> cf = ChronoFormatter.setUp(Moment.axis(), new Locale("de", "SE")) .addPattern("d. MMMM, G yyyy HH:mm ZZZZZ", PatternType.CLDR).build().withLatinEraNames(); assertThat( cf.parse("30. Februar, AD 1712 00:00 +02:00"), is(PlainDate.of(1712, 3, 11).atStartOfDay().at(ZonalOffset.ofHours(OffsetSign.AHEAD_OF_UTC, 2)))); } @Test public void unixChronology1() { ChronoFormatter<Moment> cf2 = ChronoFormatter.setUp(Moment.axis(), Locale.ROOT).addPattern( "yyyy-MM-dd HH:mm VV", PatternType.CLDR ).build().withTimezone("Europe/Moscow"); Instant instant = Instant.now(); Moment moment = Moment.from(instant); String expected = cf2.format(moment); System.out.println(expected); ChronoFormatter<Instant> cf1 = ChronoFormatter.setUp(Moment.axis(TemporalType.INSTANT), Locale.ROOT).addPattern( "yyyy-MM-dd HH:mm VV", PatternType.CLDR ).build().withTimezone("Europe/Moscow"); assertThat( cf1.format(instant), is(expected)); } @Test public void unixChronology2() { ChronoFormatter<Moment> cf2 = ChronoFormatter.setUp(Moment.axis(), Locale.ENGLISH).addPattern( "yyyy-MM-dd HH:mm zzzz", PatternType.CLDR ).build().withTimezone("Europe/Moscow"); Instant instant = Instant.now(); Moment moment = Moment.from(instant); String expected = cf2.format(moment); System.out.println(expected); ChronoFormatter<Instant> cf1 = ChronoFormatter.setUp(Moment.axis(TemporalType.INSTANT), Locale.ENGLISH).addPattern( "yyyy-MM-dd HH:mm zzzz", PatternType.CLDR ).build().withTimezone("Europe/Moscow"); assertThat( cf1.format(instant), is(expected)); } @Test public void dayPeriods() { ChronoFormatter<PlainTimestamp> cf2 = ChronoFormatter.ofPattern( "yyyy-MM-dd h:mm B", PatternType.CLDR, Locale.ENGLISH, PlainTimestamp.axis()); LocalDateTime ldt = LocalDateTime.now(); PlainTimestamp tsp = PlainTimestamp.from(ldt); String expected = cf2.format(tsp); System.out.println(expected); ChronoFormatter<LocalDateTime> cf1 = ChronoFormatter.ofPattern( "yyyy-MM-dd h:mm B", PatternType.CLDR, Locale.ENGLISH, PlainTimestamp.axis(TemporalType.LOCAL_DATE_TIME)); assertThat( cf1.format(ldt), is(expected)); } @Test public void weekOfYear() { ChronoFormatter<Instant> cf = ChronoFormatter.ofPattern( "ww, yyyy-MM-dd HH:mm", PatternType.CLDR, Locale.GERMANY, Moment.axis(TemporalType.INSTANT)) .withTimezone(ZonalOffset.UTC); Moment moment = PlainTimestamp.of(2016, 1, 1, 0, 0).atUTC(); Instant instant = TemporalType.INSTANT.from(moment); assertThat(cf.format(instant), is("53, 2016-01-01 00:00")); assertThat(cf.with(Locale.US).format(instant), is("01, 2016-01-01 00:00")); } }