internal HebrewYearMonthDayCalculator(HebrewMonthNumbering monthNumbering) : base(HebrewScripturalCalculator.MinYear, HebrewScripturalCalculator.MaxYear, 3654, // Average length of 10 years UnixEpochDayAtStartOfYear1) { this.monthNumbering = monthNumbering; }
internal HebrewYearMonthDayCalculator(HebrewMonthNumbering monthNumbering) : base(HebrewScripturalCalculator.MinYear, HebrewScripturalCalculator.MaxYear, 3654, // Average length of 10 years UnixEpochDayAtStartOfYear1) { this.monthNumbering = monthNumbering; }
public void PlusMonths_Overflow(HebrewMonthNumbering monthNumbering) { var calendar = CalendarSystem.GetHebrewCalendar(monthNumbering); // TODO: It would be nice to have an easy way of getting the smallest/largest LocalDate for // a calendar. Or possibly FromDayOfYear as well... instead, we'll just add/subtract 8 months instead var earlyDate = new LocalDate(calendar.MinYear, 1, 1, calendar); var lateDate = new LocalDate(calendar.MaxYear, 12, 1, calendar); Assert.Throws <OverflowException>(() => earlyDate.PlusMonths(-7)); Assert.Throws <OverflowException>(() => lateDate.PlusMonths(7)); }
public void DayOfYearAndReverse(HebrewMonthNumbering numbering) { var calculator = new HebrewYearMonthDayCalculator(numbering); for (int year = 5400; year < 5419; year++) { int daysInYear = calculator.GetDaysInYear(year); for (int dayOfYear = 1; dayOfYear <= daysInYear; dayOfYear++) { YearMonthDay ymd = calculator.GetYearMonthDay(year, dayOfYear); Assert.AreEqual(dayOfYear, calculator.GetDayOfYear(ymd)); } } }
internal HebrewYearMonthDayCalculator(HebrewMonthNumbering monthNumbering) : base(HebrewScripturalCalculator.MinYear, HebrewScripturalCalculator.MaxYear, (long)(365.4 * NodaConstants.TicksPerStandardDay), // Average year length (AbsoluteDayOfHebrewEpoch - AbsoluteDayOfUnixEpoch) * NodaConstants.TicksPerStandardDay, // Tick at year 1 new[] { Era.AnnoMundi }) { switch (monthNumbering) { case HebrewMonthNumbering.Civil: calendarToScriptural = HebrewMonthConverter.CivilToScriptural; scripturalToCalendar = HebrewMonthConverter.ScripturalToCivil; break; case HebrewMonthNumbering.Scriptural: calendarToScriptural = NoOp; scripturalToCalendar = NoOp; break; } }
/// <summary> /// Returns a Hebrew calendar, as described at http://en.wikipedia.org/wiki/Hebrew_calendar. This is a /// purely mathematical calculator, applied proleptically to the period where the real calendar was observational. /// </summary> /// <remarks> /// <para>Please note that in version 1.3.0 of Noda Time, support for the Hebrew calendar is somewhat experimental, /// particularly in terms of calculations involving adding or subtracting years. Additionally, text formatting /// and parsing using month names is not currently supported, due to the challenges of handling leap months. /// It is hoped that this will be improved in future versions.</para> /// <para>The implementation for this was taken from http://www.cs.tau.ac.il/~nachum/calendar-book/papers/calendar.ps, /// which is a public domain algorithm presumably equivalent to that given in the Calendrical Calculations book /// by the same authors (Nachum Dershowitz and Edward Reingold). /// </para> /// </remarks> /// <param name="monthNumbering">The month numbering system to use</param> /// <returns>A Hebrew calendar system for the given month numbering.</returns> public static CalendarSystem GetHebrewCalendar(HebrewMonthNumbering monthNumbering) { Preconditions.CheckArgumentRange(nameof(monthNumbering), (int)monthNumbering, 1, 2); return(HebrewCalendars.ByMonthNumbering[((int)monthNumbering) - 1]); }
public void DayOfYearAndReverse(HebrewMonthNumbering numbering) { var calculator = new HebrewYearMonthDayCalculator(numbering); for (int year = 5400; year < 5419; year++) { int daysInYear = calculator.GetDaysInYear(year); for (int dayOfYear = 1; dayOfYear <= daysInYear; dayOfYear++) { YearMonthDay ymd = calculator.GetYearMonthDay(year, dayOfYear); Assert.AreEqual(dayOfYear, calculator.GetDayOfYear(ymd)); } } }
/// <summary> /// Returns a Hebrew calendar, as described at http://en.wikipedia.org/wiki/Hebrew_calendar. This is a /// purely mathematical calculator, applied proleptically to the period where the real calendar was observational. /// </summary> /// <remarks> /// <para>Please note that in version 1.3.0 of Noda Time, support for the Hebrew calendar is somewhat experimental, /// particularly in terms of calculations involving adding or subtracting years. Additionally, text formatting /// and parsing using month names is not currently supported, due to the challenges of handling leap months. /// It is hoped that this will be improved in future versions.</para> /// <para>The implementation for this was taken from http://www.cs.tau.ac.il/~nachum/calendar-book/papers/calendar.ps, /// which is a public domain algorithm presumably equivalent to that given in the Calendrical Calculations book /// by the same authors (Nachum Dershowitz and Edward Reingold). /// </para> /// </remarks> /// <param name="monthNumbering">The month numbering system to use</param> /// <returns>A Hebrew calendar system for the given month numbering.</returns> public static CalendarSystem GetHebrewCalendar(HebrewMonthNumbering monthNumbering) { Preconditions.CheckArgumentRange(nameof(monthNumbering), (int) monthNumbering, 1, 2); return HebrewCalendars.ByMonthNumbering[((int) monthNumbering) - 1]; }