/** * Converts this {@link JulianDate} to a {@link GregorianDate} with a default time standard of Coordinated Universal Time. * @return The {@link GregorianDate}. */ @CS2JWarning("Unhandled attribute removed: Pure") @Nonnull public final GregorianDate toGregorianDate() { return toGregorianDate(TimeStandard.COORDINATED_UNIVERSAL_TIME); }
/** * Converts this {@link JulianDate} to a {@link ZonedDateTime} expressed in the specified time standard. * @param standard The time standard in which to express the returned {@link ZonedDateTime}. * @return The {@link ZonedDateTime}. */ @CS2JWarning("Unhandled attribute removed: Pure") @Nonnull public final ZonedDateTime toDateTime(@Nonnull TimeStandard standard) { return toGregorianDate(standard).toDateTime(); }
/** * Converts this {@link JulianDate} to a {@link ZonedDateTime} with a default time standard of Coordinated Universal Time. * @return The {@link ZonedDateTime}. */ @CS2JWarning("Unhandled attribute removed: Pure") @Nonnull public final ZonedDateTime toDateTime() { return toGregorianDate().toDateTime(); }
/** * Converts a {@link JulianDate} to an ISO8601 date string. * @param date The date to convert. * @param format The format to use. * @return The date represented as an ISO8601 date string. */ @Nonnull public static String toIso8601(@Nonnull JulianDate date, @Nonnull Iso8601Format format) { //If the JulianDate is outside the range of supported CZML values, //clamp it to the minimum/maximum CZML ISO8601 value. if (JulianDate.lessThanOrEqual(date, s_minimumDate)) { return GregorianDate.MinValue.toIso8601String(format); } if (JulianDate.greaterThanOrEqual(date, s_maximumDate)) { return GregorianDate.MaxValue.toIso8601String(format); } return date.toGregorianDate().toIso8601String(format); }
/** * Returns the value of this {@link JulianDate} in the standard format. * @return The string. */ @Override public String toString() { StringBuilder builder = new StringBuilder(); StringHelper.appendFormat(builder, CultureInfoHelper.getCurrentCulture(), "{0}:{1} ", m_day, m_secondsOfDay); builder.append(getStandard() == TimeStandard.COORDINATED_UNIVERSAL_TIME ? "UTC" : "TAI"); if (JulianDate.lessThan(this, GregorianDate.MinValue.toJulianDate())) { StringHelper.appendFormat(builder, CultureInfoHelper.getCurrentCulture(), " (before {0})", GregorianDate.MinValue); } else if (JulianDate.greaterThan(this, GregorianDate.MaxValue.toJulianDate())) { StringHelper.appendFormat(builder, CultureInfoHelper.getCurrentCulture(), " (after {0})", GregorianDate.MaxValue); } else { StringHelper.appendFormat(builder, CultureInfoHelper.getCurrentCulture(), " ({0})", toGregorianDate()); } return builder.toString(); }
@Test public final void maxValueRoundTripsThroughJulianDate() { JulianDate max = GregorianDate.MaxValue.toJulianDate(); GregorianDate date = max.toGregorianDate(); String iso = date.toIso8601String(Iso8601Format.EXTENDED, 6); String expected = GregorianDate.MaxValue.toIso8601String(Iso8601Format.EXTENDED, 6); Assert.assertEquals(expected, iso); }
@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); }
@Test public final void canConvertGregorianDateRepresentingLeapSecondToJulianDate() { GregorianDate leapSecondGregorianDate = new GregorianDate(2008, 12, 31, 23, 59, 60D); JulianDate leapSecondJulianDate = leapSecondGregorianDate.toJulianDate(); AssertHelper.assertEquals(leapSecondGregorianDate, leapSecondJulianDate.toGregorianDate()); GregorianDate oneSecondLater = new GregorianDate(2009, 1, 1, 0, 0, 0D); GregorianDate oneSecondBefore = new GregorianDate(2008, 12, 31, 23, 59, 59D); Assert.assertEquals(1, oneSecondLater.toJulianDate().subtract(leapSecondJulianDate).getSeconds(), 0d); Assert.assertEquals(1, leapSecondJulianDate.subtract(oneSecondBefore.toJulianDate()).getSeconds(), 0d); }
@Test public final void gregorianDateToJulian() { GregorianDate gregorianDate = new GregorianDate(2000, 1, 1, 12, 0, 0D); JulianDate julianDate = new JulianDate(gregorianDate); Assert.assertEquals(2451545.0, julianDate.getTotalDays(), 0d); gregorianDate = new GregorianDate(2006, 1, 1, 0, 0, 0D); julianDate = new JulianDate(gregorianDate); Assert.assertEquals(2453736.5, julianDate.getTotalDays(), 0d); gregorianDate = new GregorianDate(1973, 1, 1, 0, 0, 0D); julianDate = new JulianDate(gregorianDate); Assert.assertEquals(2441683.5, julianDate.getTotalDays(), 0d); ZonedDateTime localDateTime = DateTimeHelper.create(2000, 1, 1, 12, 0, 0, ZoneId.systemDefault()); ZonedDateTime utc = DateTimeHelper.toUniversalTime(localDateTime); julianDate = new JulianDate(localDateTime); gregorianDate = julianDate.toGregorianDate(); AssertHelper.assertEquals(new GregorianDate(utc), gregorianDate); }
@Test public final void julianToGregorianDate() { JulianDate julianDate = new JulianDate(2451545.0, TimeStandard.COORDINATED_UNIVERSAL_TIME); GregorianDate gregorianDate = julianDate.toGregorianDate(); Assert.assertEquals((int) 2000, (int) gregorianDate.getYear()); Assert.assertEquals((int) 1, (int) gregorianDate.getMonth()); Assert.assertEquals((int) 1, (int) gregorianDate.getDay()); Assert.assertEquals((int) 12, (int) gregorianDate.getHour()); Assert.assertEquals((int) 0, (int) gregorianDate.getMinute()); Assert.assertEquals(0, gregorianDate.getSecond(), 0d); julianDate = new JulianDate(2453736.5, TimeStandard.COORDINATED_UNIVERSAL_TIME); gregorianDate = julianDate.toGregorianDate(); Assert.assertEquals((int) 2006, (int) gregorianDate.getYear()); Assert.assertEquals((int) 1, (int) gregorianDate.getMonth()); Assert.assertEquals((int) 1, (int) gregorianDate.getDay()); Assert.assertEquals((int) 0, (int) gregorianDate.getHour()); Assert.assertEquals((int) 0, (int) gregorianDate.getMinute()); Assert.assertEquals(0, gregorianDate.getSecond(), 0d); julianDate = new JulianDate(2441683.5, TimeStandard.COORDINATED_UNIVERSAL_TIME); gregorianDate = julianDate.toGregorianDate(); Assert.assertEquals((int) 1973, (int) gregorianDate.getYear()); Assert.assertEquals((int) 1, (int) gregorianDate.getMonth()); Assert.assertEquals((int) 1, (int) gregorianDate.getDay()); Assert.assertEquals((int) 0, (int) gregorianDate.getHour()); Assert.assertEquals((int) 0, (int) gregorianDate.getMinute()); Assert.assertEquals(0, gregorianDate.getSecond(), 0d); julianDate = new JulianDate(2441683.5, TimeStandard.COORDINATED_UNIVERSAL_TIME); GregorianDate internationalTimeGregorianDate = julianDate.toGregorianDate(TimeStandard.INTERNATIONAL_ATOMIC_TIME); AssertHelper.assertNotEqual(gregorianDate, internationalTimeGregorianDate); }
@Test public final void julianDateGregorianDateRoundTrip() { GregorianDate gregorianDate = new GregorianDate(2008, 1, 1, 1, 1, 1.00000000008); JulianDate julianDate = new JulianDate(gregorianDate); GregorianDate roundTrip = julianDate.toGregorianDate(); Assert.assertEquals((int) gregorianDate.getYear(), (int) roundTrip.getYear()); Assert.assertEquals((int) gregorianDate.getMonth(), (int) roundTrip.getMonth()); Assert.assertEquals((int) gregorianDate.getDay(), (int) roundTrip.getDay()); Assert.assertEquals((int) gregorianDate.getHour(), (int) roundTrip.getHour()); Assert.assertEquals((int) gregorianDate.getMinute(), (int) roundTrip.getMinute()); Assert.assertEquals(gregorianDate.getSecond(), roundTrip.getSecond(), Constants.Epsilon13); }
@Test public final void testParseISO8601DayOfYear() { GregorianDate iso = new GregorianDate(1985, 2, 11, 2, 0, 5.2134); GregorianDate result = GregorianDate.parse("1985-042T02:00:05.2134"); AssertHelper.assertEquals(iso, result); iso = new GregorianDate(1985, 2, 11, 2, 0, 5.21345); result = GregorianDate.parse("1985-042T02:00:05.21345Z"); AssertHelper.assertEquals(iso, result); iso = new GregorianDate(1985, 2, 11, 2, 0, 5D); result = GregorianDate.parse("1985-042T02:00:05"); AssertHelper.assertEquals(iso, result); iso = new GregorianDate(1985, 2, 11); result = GregorianDate.parse("1985-042"); AssertHelper.assertEquals(iso, result); // Make sure to check each month to ensure we have it right String first = "1986-"; String last = "T02:01:04Z"; JulianDate baseDate = new JulianDate(new GregorianDate(1986, 1, 12, 2, 1, 4D)); for (int i = 1; i < 12; i++) { String testString = StringHelper.format(first + "{0:000}" + last, 12 + i * 30); GregorianDate expected = baseDate.addDays(i * 30).toGregorianDate(); AssertHelper.assertEquals(expected, GregorianDate.parse(testString)); } }