@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); }
/** * Indicates whether another instance of this type is exactly equal to this instance. * @param other The instance to compare to this instance. * @return {@code true} if {@code other} represents the same value as this instance; otherwise, {@code false}. */ public final boolean equalsType(@Nonnull GregorianDate other) { return compareTo(other) == 0; }
/** * Indicates whether another object is exactly equal to this instance. * @param obj The object to compare to this instance. * @return {@code true} if {@code obj} is an instance of this type and represents the same value as this instance; otherwise, {@code false}. */ @Override public boolean equals(Object obj) { return obj instanceof GregorianDate && equalsType((GregorianDate) obj); }
/** * Rounds this instance to the specified number of decimal digits in the seconds, rolling over to minutes, hours, days, etc. as necessary. If the specified {@code timeStandard} is {@link TimeStandard#COORDINATED_UNIVERSAL_TIME}, (UTC), the seconds will be allowed to go above 60 during a leap second. For any other time standard, the {@code Second} ({@link #getSecond get}) will be below 60. * @param digits The number of digits after the decimal point to include in the seconds. * @param timeStandard The time standard in which this {@link GregorianDate} is expressed. * @return The rounded date. */ @CS2JWarning("Unhandled attribute removed: Pure") @Nonnull public final GregorianDate roundSeconds(int digits, @Nonnull TimeStandard timeStandard) { double roundedSeconds = MathHelper.round(m_second, digits); double secondsDifference = roundedSeconds - m_second; // no need to rollover if rounding down or within same minute if (roundedSeconds < 60.0 || secondsDifference <= 0) { return new GregorianDate(getYear(), getMonth(), getDay(), getHour(), getMinute(), roundedSeconds); } return rolloverTime(0D, 0D, 0D, secondsDifference, timeStandard); }
@Nonnull private final GregorianDate rolloverTime(double days, double hours, double minutes, double seconds, @Nonnull TimeStandard timeStandard) { int wholeDays = (int) days; seconds += (days - wholeDays) * TimeConstants.SecondsPerDay; int wholeHours = (int) hours; seconds += (hours - wholeHours) * TimeConstants.SecondsPerHour; int wholeMinutes = (int) minutes; seconds += (minutes - wholeMinutes) * TimeConstants.SecondsPerMinute; Duration timeToAdd = new Duration(wholeDays, wholeHours, wholeMinutes, seconds); JulianDate julianResult = toJulianDate(timeStandard).add(timeToAdd); return new GregorianDate(julianResult, timeStandard); }
@Test public final void testGetHashCode() { GregorianDate date = new GregorianDate(2001, 1, 1, 6, 3, 14D); GregorianDate sameDate = new GregorianDate(2001, 1, 1, 6, 3, 14D); GregorianDate differentTime = new GregorianDate(2001, 1, 1, 6, 5, 26D); GregorianDate differentDay = new GregorianDate(2001, 2, 3, 6, 3, 14D); Assert.assertEquals((int) date.hashCode(), (int) sameDate.hashCode()); AssertHelper.assertNotEqual(date.hashCode(), differentTime.hashCode()); AssertHelper.assertNotEqual(date.hashCode(), differentDay.hashCode()); }
@Test public final void testYearDayConstructor() { ZonedDateTime aTime = DateTimeHelper.create(2000, 2, 28, 1, 3, 4); Assert.assertEquals((int) 31 + 28, (int) aTime.getDayOfYear()); //* January has 31 days, so add 28 to that... GregorianDate sameDate = new GregorianDate(aTime.getYear(), aTime.getDayOfYear()); Assert.assertEquals((int) 2000, (int) sameDate.getYear()); Assert.assertEquals((int) 59, (int) sameDate.getDayOfYear()); Assert.assertEquals((int) 2, (int) sameDate.getMonth()); Assert.assertEquals((int) 0, (int) sameDate.getHour()); Assert.assertEquals((int) 0, (int) sameDate.getMinute()); Assert.assertEquals(0, sameDate.getSecond(), 0d); sameDate = new GregorianDate(2000, 60.6); //* 60 days and 14.4 hours, or 14 hours and 24 minutes (1/10 of a day is 2.4 hours, times that by 6) Assert.assertEquals((int) 2000, (int) sameDate.getYear()); Assert.assertEquals((int) 60, (int) sameDate.getDayOfYear()); Assert.assertEquals((int) 2, (int) sameDate.getMonth()); //* leap year Assert.assertEquals((int) 14, (int) sameDate.getHour()); Assert.assertEquals((int) 24, (int) sameDate.getMinute()); Assert.assertEquals(0D, sameDate.getSecond(), Constants.Epsilon9); //* Richard and Michael both said this is ok }
@Test public final void testComparisons() { GregorianDate date = new GregorianDate(2001, 1, 1, 6, 3, 14D); GregorianDate sameDate = new GregorianDate(2001, 1, 1, 6, 3, 14D); GregorianDate laterTime = new GregorianDate(2001, 1, 1, 6, 5, 26D); GregorianDate laterDay = new GregorianDate(2001, 2, 2, 6, 3, 14D); Assert.assertTrue(GregorianDate.equals(date, sameDate)); Assert.assertTrue(GregorianDate.equals(sameDate, date)); Assert.assertTrue(GregorianDate.notEquals(date, laterTime)); Assert.assertTrue(GregorianDate.greaterThanOrEqual(date, sameDate)); Assert.assertTrue(GregorianDate.lessThanOrEqual(date, sameDate)); Assert.assertTrue(date.compareTo(sameDate) == 0); Assert.assertTrue(date.compareTo(laterDay) < 0); Assert.assertTrue(GregorianDate.lessThan(sameDate, laterTime)); Assert.assertTrue(GregorianDate.lessThanOrEqual(sameDate, laterTime)); Assert.assertTrue(GregorianDate.greaterThan(laterTime, sameDate)); Assert.assertTrue(GregorianDate.greaterThanOrEqual(laterTime, sameDate)); Object dateAsObject = new GregorianDate(2001, 1, 1, 6, 3, 15D); AssertHelper.assertNotEqual(date, dateAsObject); }
@Test public final void wholeNumberSecondsIsFormattedCorrectly() { GregorianDate gd = new GregorianDate(2012, 8, 7, 13, 59, 55.0); Assert.assertEquals("2012-08-07 13:59:55.000000", gd.toString("yyyy-MM-dd HH:mm:ss.ffffff", m_cultureInfo)); gd = new GregorianDate(2012, 8, 7, 13, 59, 55.0); Assert.assertEquals("2012-08-07 13:59:55", gd.toString("yyyy-MM-dd HH:mm:ss", m_cultureInfo)); gd = new GregorianDate(2012, 8, 7, 13, 59, 55.0); Assert.assertEquals("2012-08-07 13:59:55", gd.toString("yyyy-MM-dd HH:mm:ss.FFFFFF", m_cultureInfo)); }
public final void toIso8601ExtendedStringProducesCorrectStrings(int year, int month, int day, int hour, int minute, double second, String expectedIsoString) { cesiumlanguagewriter.GregorianDate gregorianDate = new GregorianDate(year, month, day, hour, minute, second); String isoString = gregorianDate.toIso8601String(Iso8601Format.EXTENDED); Assert.assertEquals(expectedIsoString, isoString); AssertHelper.assertEquals(gregorianDate, GregorianDate.parse(isoString)); }
/** * Initializes a {@link JulianDate} from a {@link ZonedDateTime}. The time standard will be Coordinated Universal Time (UTC). * @param dateTime The {@link ZonedDateTime}. */ public JulianDate(@Nonnull ZonedDateTime dateTime) { this(new GregorianDate(dateTime)); }
private static boolean parseIso8601DayOfYear(String isoString, DateTimeFormatInfo dfi, @Nonnull GregorianDate[] result, boolean setExceptionOnError, @Nonnull NumberFormatException[] exception) { result[0] = new GregorianDate(); String[] tokens = StringHelper.split(isoString, '-'); if (tokens.length != 2) { result[0] = new GregorianDate(yr4, doy, result[0].getHour(), result[0].getMinute(), result[0].getSecond()); return true;
@Test public final void testEquality() { GregorianDate first = new GregorianDate(2000, 1, 1, 5, 1, 1D); GregorianDate second = new GregorianDate(2000, 1, 1, 5, 1, 1D); AssertHelper.assertEquals(first, second); Assert.assertTrue(first.equalsType(second)); Assert.assertTrue(second.equalsType(first)); Assert.assertEquals((int) 0, (int) first.compareTo(second)); Assert.assertEquals((int) 0, (int) second.compareTo(first)); second = new GregorianDate(2000, 1, 1, 6, 1, 1D); AssertHelper.assertNotEqual(first, second); Assert.assertFalse(first.equalsType(second)); Assert.assertFalse(second.equalsType(first)); AssertHelper.assertNotEqual(0, first.compareTo(second)); AssertHelper.assertNotEqual(0, second.compareTo(first)); second = new GregorianDate(2000, 2, 1, 5, 1, 1D); AssertHelper.assertNotEqual(first, second); Assert.assertFalse(first.equalsType(second)); Assert.assertFalse(second.equalsType(first)); AssertHelper.assertNotEqual(0, first.compareTo(second)); AssertHelper.assertNotEqual(0, second.compareTo(first)); AssertHelper.assertNotEqual(first, 5); }
@Test public final void roundSecondsRollsOver() { GregorianDate gd = new GregorianDate(2012, 8, 7, 13, 55, 59.9999999); AssertHelper.assertEquals(new GregorianDate(2012, 8, 7, 13, 56, 0.0), gd.roundSeconds(6)); gd = new GregorianDate(2012, 8, 7, 13, 59, 59.9999999); AssertHelper.assertEquals(new GregorianDate(2012, 8, 7, 14, 0, 0.0), gd.roundSeconds(6)); gd = new GregorianDate(2012, 8, 7, 23, 59, 59.9999999); AssertHelper.assertEquals(new GregorianDate(2012, 8, 8, 0, 0, 0.0), gd.roundSeconds(6)); gd = new GregorianDate(2012, 8, 31, 23, 59, 59.9999999); AssertHelper.assertEquals(new GregorianDate(2012, 9, 1, 0, 0, 0.0), gd.roundSeconds(6)); gd = new GregorianDate(2012, 12, 31, 23, 59, 59.9999999); AssertHelper.assertEquals(new GregorianDate(2013, 1, 1, 0, 0, 0.0), gd.roundSeconds(6)); }
@Test public final void cannotParseInvalidDates() { @CS2JInfo("Initialization of C# struct variable 'result' added by translator.") GregorianDate result = new GregorianDate(); final GregorianDate[] out$result$15 = { null }; Assert.assertEquals(false, GregorianDate.tryParse("02/29/2002", m_cultureInfo, out$result$15)); result = out$result$15[0]; AssertHelper.assertEquals(GregorianDate.MinValue, result); final GregorianDate[] out$result$16 = { null }; Assert.assertEquals(false, GregorianDate.tryParse("13/01/2002", m_cultureInfo, out$result$16)); result = out$result$16[0]; }
@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 testParse() { GregorianDate expected = new GregorianDate(2002, 2, 25); AssertHelper.assertEquals(expected, GregorianDate.parse("02/25/2002", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2/25/2002", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2002-02-25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2002-2-25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("Monday, 25 February 2002", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("Mon,02/25/2002", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("Mon,2/25/2002", m_cultureInfo)); expected = new GregorianDate(2002, 2, 25, 5, 25, 0D); AssertHelper.assertEquals(expected, GregorianDate.parse("Monday, 25 February 2002 05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02/25/2002 05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2/25/2002 05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2/25/2002 5:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2002-02-25T05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2002-2-25T05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02-2002-25 05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2-2002-25 05:25", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2-2002-25 5:25", m_cultureInfo)); expected = new GregorianDate(2002, 2, 25, 5, 25, 13D); AssertHelper.assertEquals(expected, GregorianDate.parse("Monday, 25 February 2002 05:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02/25/2002 05:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02/25/2002 5:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2/25/2002 5:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("2002-02-25T05:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02-2002-25T05:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02-2002-25 05:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02-2002-25 5:25:13", m_cultureInfo)); AssertHelper.assertEquals(expected, GregorianDate.parse("02-2002-25 05:25:13 Mon", m_cultureInfo));
public final void toIso8601CompactStringProducesCorrectStrings(int year, int month, int day, int hour, int minute, double second, String expectedIsoString) { cesiumlanguagewriter.GregorianDate gregorianDate = new GregorianDate(year, month, day, hour, minute, second); String isoString = gregorianDate.toIso8601String(Iso8601Format.COMPACT); Assert.assertEquals(expectedIsoString, isoString); }
@Test public final void canConstructGregorianDateRepresentingLeapSecond() { GregorianDate date = new GregorianDate(2008, 12, 31, 23, 59, 60D); Assert.assertEquals(60D, date.getSecond(), Constants.Epsilon14); }
@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)); } }