/// <summary> /// Determine if a lunar eclipse is likely to occur. /// </summary> /// <returns> /// <para>status -- One of "Lunar eclipse certain", "Lunar eclipse possible", or "No lunar eclipse".</para> /// <para>eventDateDay -- Date of eclipse event (day).</para> /// <para>eventDateMonth -- Date of eclipse event (month).</para> /// <para>eventDateYear -- Date of eclipse event (year).</para> /// </returns> public (string status, double eventDateDay, int eventDateMonth, int eventDateYear) LunarEclipseOccurrence(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours) { var daylightSaving = (isDaylightSaving) ? 1 : 0; var julianDateOfFullMoon = PAMacros.FullMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear); var gDateOfFullMoonDay = PAMacros.JulianDateDay(julianDateOfFullMoon); var integerDay = (gDateOfFullMoonDay).Floor(); var gDateOfFullMoonMonth = PAMacros.JulianDateMonth(julianDateOfFullMoon); var gDateOfFullMoonYear = PAMacros.JulianDateYear(julianDateOfFullMoon); var utOfFullMoonHours = gDateOfFullMoonDay - integerDay; var localCivilDateDay = PAMacros.UniversalTime_LocalCivilDay(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear); var localCivilDateMonth = PAMacros.UniversalTime_LocalCivilMonth(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear); var localCivilDateYear = PAMacros.UniversalTime_LocalCivilYear(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear); var eclipseOccurrence = PAMacros.LunarEclipseOccurrence(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear); var status = eclipseOccurrence; var eventDateDay = localCivilDateDay; var eventDateMonth = localCivilDateMonth; var eventDateYear = localCivilDateYear; return(status, eventDateDay, eventDateMonth, eventDateYear); }