package net.time4j.scale; import net.time4j.Moment; import net.time4j.PlainDate; import net.time4j.PlainTime; import net.time4j.PlainTimestamp; import net.time4j.SI; import net.time4j.tz.ZonalOffset; import java.math.BigDecimal; 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 TimeScaleTest { @Test public void transformUTC() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.transform(TimeScale.UTC), is(new BigDecimal("252892809.123456789"))); assertThat( Moment.of(252892809, 123456789, TimeScale.UTC), is(utc)); } @Test public void transformGPS() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 1, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.transform(TimeScale.GPS), is(new BigDecimal("1.123456789"))); assertThat( Moment.of(1, 123456789, TimeScale.GPS), is(utc)); } @Test public void transformTAI() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 5), PlainTime.of(23, 59, 50, 123456789) ).inTimezone(ZonalOffset.UTC); // 10 secs before GPS epoch assertThat( utc.transform(TimeScale.TAI), is(new BigDecimal("252892809.123456789"))); assertThat( Moment.of(252892809, 123456789, TimeScale.TAI), is(utc)); } @Test public void transformPOSIX() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.transform(TimeScale.POSIX), is(new BigDecimal("315964800.123456789"))); assertThat( Moment.of(315964800L, 123456789, TimeScale.POSIX), is(utc)); } @Test public void getElapsedTimeUTC() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getElapsedTime(TimeScale.UTC), is(315964800 + 9 - 2 * 365 * 86400L)); } @Test public void getElapsedTimeTAI() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 5), PlainTime.of(23, 59, 50, 123456789) ).inTimezone(ZonalOffset.UTC); // 10 secs before GPS epoch assertThat( utc.getElapsedTime(TimeScale.TAI), is(315964800 + 9 - 2 * 365 * 86400L)); } @Test public void getElapsedTimeGPS() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 1, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getElapsedTime(TimeScale.GPS), is(1L)); } @Test public void getElapsedTimePOSIX() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getElapsedTime(TimeScale.POSIX), is(315964800L)); } @Test public void getNanosecondUTC() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getNanosecond(TimeScale.UTC), is(123456789)); } @Test public void getNanosecondGPS() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getNanosecond(TimeScale.GPS), is(123456789)); } @Test public void getNanosecondTAI() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getNanosecond(TimeScale.TAI), is(123456789)); } @Test public void getNanosecondPOSIX() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 6), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc.getNanosecond(TimeScale.POSIX), is(123456789)); } @Test public void toStringUTC() { Moment utc = PlainTimestamp.of( PlainDate.of(2012, 6, 30), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC).plus(1, SI.SECONDS); assertThat( utc.toString(TimeScale.UTC), is("UTC-2012-06-30T23:59:60,123456789Z")); } @Test public void toStringGPS() { Moment utc1 = PlainTimestamp.of( PlainDate.of(2012, 6, 30), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC).plus(1, SI.SECONDS); assertThat( utc1.toString(TimeScale.GPS), is("GPS-2012-07-01T00:00:15,123456789Z")); Moment utc2 = PlainTimestamp.of( PlainDate.of(2012, 7, 1), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc2.toString(TimeScale.GPS), is("GPS-2012-07-01T00:00:16,123456789Z")); } @Test public void toStringTAI() { Moment utc1 = PlainTimestamp.of( PlainDate.of(2012, 6, 30), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC).plus(1, SI.SECONDS); assertThat( utc1.toString(TimeScale.TAI), is("TAI-2012-07-01T00:00:34,123456789Z")); Moment utc2 = PlainTimestamp.of( PlainDate.of(2012, 7, 1), PlainTime.of(0, 0, 0, 123456789) ).inTimezone(ZonalOffset.UTC); assertThat( utc2.toString(TimeScale.TAI), is("TAI-2012-07-01T00:00:35,123456789Z")); } @Test public void toStringPOSIX() { Moment utc = PlainTimestamp.of( PlainDate.of(2012, 6, 30), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC).plus(1, SI.SECONDS); assertThat( utc.toString(TimeScale.POSIX), is("POSIX-2012-06-30T23:59:59,123456789Z")); } @Test(expected=IllegalArgumentException.class) public void getElapsedTimeGPSBefore1980() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 5), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC); utc.getElapsedTime(TimeScale.GPS); } @Test(expected=IllegalArgumentException.class) public void getNanosecondGPSBefore1980() { Moment utc = PlainTimestamp.of( PlainDate.of(1980, 1, 5), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC); utc.getNanosecond(TimeScale.GPS); } @Test(expected=IllegalArgumentException.class) public void getElapsedTimeTAIBefore1972() { Moment utc = PlainTimestamp.of( PlainDate.of(1971, 12, 31), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC); utc.getElapsedTime(TimeScale.TAI); } @Test(expected=IllegalArgumentException.class) public void getNanosecondTAIBefore1972() { Moment utc = PlainTimestamp.of( PlainDate.of(1971, 12, 31), PlainTime.of(23, 59, 59, 123456789) ).inTimezone(ZonalOffset.UTC); utc.getNanosecond(TimeScale.TAI); } }