/** * Converts this date to {@link TimeStandard#INTERNATIONAL_ATOMIC_TIME} (TAI). * @return An equivalent date expressed in TAI. */ @Nonnull public final JulianDate toInternationalAtomicTime() { if (getStandard() == TimeStandard.INTERNATIONAL_ATOMIC_TIME) { return this; } return new JulianDate(getDay(), getSecondsOfDay() + LeapSeconds.getInstance().getTaiMinusUtc(this), TimeStandard.INTERNATIONAL_ATOMIC_TIME); }
/** * Tests that the look-up operation produces the same result using either the {@link TimeStandard#INTERNATIONAL_ATOMIC_TIME} standard or the {@link TimeStandard#COORDINATED_UNIVERSAL_TIME} standard. */ @Test public final void testGetLeapSecondsForDateTaiUtc() { LeapSeconds leapSeconds = new LeapSeconds(); JulianDate tai = new JulianDate(2447162.5, TimeStandard.INTERNATIONAL_ATOMIC_TIME); JulianDate utc = tai.toTimeStandard(TimeStandard.COORDINATED_UNIVERSAL_TIME); Assert.assertEquals(leapSeconds.getTaiMinusUtc(tai), leapSeconds.getTaiMinusUtc(utc), 0d); utc = new JulianDate(2445151.5, TimeStandard.COORDINATED_UNIVERSAL_TIME); tai = utc.toTimeStandard(TimeStandard.INTERNATIONAL_ATOMIC_TIME); Assert.assertEquals(leapSeconds.getTaiMinusUtc(utc), leapSeconds.getTaiMinusUtc(tai), 0d); }
/** * Tests that negative leap seconds are supported. */ @Test public final void testNegativeLeapSecond() { ArrayList<cesiumlanguagewriter.LeapSecond> newList = new ArrayList<cesiumlanguagewriter.LeapSecond>(); newList.add(new LeapSecond(2451545.0, 11D)); newList.add(new LeapSecond(2451555.0, 12D)); newList.add(new LeapSecond(2451565.0, 11D)); newList.add(new LeapSecond(2451575.0, 10D)); LeapSeconds leapSeconds = new LeapSeconds(newList); Assert.assertEquals(11, leapSeconds.getTaiMinusUtc(new JulianDate(2451545.5, TimeStandard.COORDINATED_UNIVERSAL_TIME)), 0d); Assert.assertEquals(12, leapSeconds.getTaiMinusUtc(new JulianDate(2451555.5, TimeStandard.COORDINATED_UNIVERSAL_TIME)), 0d); Assert.assertEquals(11, leapSeconds.getTaiMinusUtc(new JulianDate(2451565.5, TimeStandard.COORDINATED_UNIVERSAL_TIME)), 0d); Assert.assertEquals(10, leapSeconds.getTaiMinusUtc(new JulianDate(2451575.5, TimeStandard.COORDINATED_UNIVERSAL_TIME)), 0d); }
result[0] = new JulianDate(getDay(), getSecondsOfDay() + LeapSeconds.getInstance().getTaiMinusUtc(this), timeStandard); return true;
/** * Tests that the look-up operation produces the correct result when using the {@link TimeStandard#INTERNATIONAL_ATOMIC_TIME} standard. */ @Test public final void testGetOffsetTai() { JulianDate date = new JulianDate(2453736, 43222.0, TimeStandard.INTERNATIONAL_ATOMIC_TIME); LeapSeconds leapSeconds = new LeapSeconds(); Assert.assertEquals(32, leapSeconds.getTaiMinusUtc(date), 0d); }
/** * Tests that epochs outside the leap second table range are supported. */ @Test public final void testExtremes() { LeapSeconds leapSeconds = new LeapSeconds(); JulianDate epochBefore = new JulianDate(2440000.5, TimeStandard.INTERNATIONAL_ATOMIC_TIME); Assert.assertEquals(10, leapSeconds.getTaiMinusUtc(epochBefore), 0d); epochBefore = new JulianDate(epochBefore.getDay(), epochBefore.getSecondsOfDay(), TimeStandard.COORDINATED_UNIVERSAL_TIME); Assert.assertEquals(10, leapSeconds.getTaiMinusUtc(epochBefore), 0d); JulianDate epochAfter = new JulianDate(2453770.5, TimeStandard.INTERNATIONAL_ATOMIC_TIME); Assert.assertEquals(33, leapSeconds.getTaiMinusUtc(epochAfter), 0d); epochAfter = new JulianDate(epochAfter.getDay(), epochAfter.getSecondsOfDay(), TimeStandard.COORDINATED_UNIVERSAL_TIME); Assert.assertEquals(33, leapSeconds.getTaiMinusUtc(epochAfter), 0d); }
/** * Tests that the look-up operation produces the correct result for times within the range of the table. */ @Test public final void testLeapSecondCount() { LeapSeconds leapSeconds = new LeapSeconds(); JulianDate utc = new JulianDate(new GregorianDate(1998, 4, 1, 12, 0, 0D)); JulianDate tai = utc.toTimeStandard(TimeStandard.INTERNATIONAL_ATOMIC_TIME); Assert.assertEquals(31, leapSeconds.getTaiMinusUtc(utc), 0d); Assert.assertEquals(31, leapSeconds.getTaiMinusUtc(tai), 0d); }
@Test public final void testNonStandardTimeStandard() { GregorianDate gregorianDate = new GregorianDate(2008, 12, 31, 23, 59, 40D); JulianDate jd = gregorianDate.toJulianDate(TimeStandard.INTERNATIONAL_ATOMIC_TIME); AssertHelper.assertEquals(TimeStandard.INTERNATIONAL_ATOMIC_TIME, jd.getStandard()); GregorianDate roundTrip1 = jd.toGregorianDate(TimeStandard.INTERNATIONAL_ATOMIC_TIME); AssertHelper.assertEquals(gregorianDate, roundTrip1); GregorianDate roundTrip = new GregorianDate(jd); AssertHelper.assertNotEqual(gregorianDate, roundTrip); double expectedDifference = LeapSeconds.getInstance().getTaiMinusUtc(jd); Assert.assertEquals(expectedDifference, gregorianDate.getSecond() - roundTrip.getSecond(), 0d); }