Esempio n. 1
0
        /// <summary>
        /// Calculate time for midnight.
        /// </summary>
        private static double ComputeMidnightTime(Midnight method, double fajr, double sunrise, double sunset)
        {
            var duration     = method == Midnight.Jafari ? DateTimeMath.ComputeDuration(fajr, sunset) : DateTimeMath.ComputeDuration(sunrise, sunset);
            var midnightTime = sunset + (duration / 2.0);

            return(midnightTime);
        }
Esempio n. 2
0
        /// <summary>
        /// Adjust calculated imsak, fajr, maghrib and isha prayer times to high latitude adjustment.
        /// </summary>
        private static PrayersInDouble AdjustAllForHighLatitude(PrayersInDouble raw, PrayerCalculationSettings settings)
        {
            //
            // Do not apply adjustment if none option is specified.
            if (settings.HighLatitudeAdjustment == HighLatitudeAdjustment.None)
            {
                return(raw);
            }

            // Copy reference.
            var method                = settings.HighLatitudeAdjustment;
            var imsak                 = raw.Imsak;
            var fajr                  = raw.Fajr;
            var sunrise               = raw.Sunrise;
            var sunset                = raw.Sunset;
            var maghrib               = raw.Maghrib;
            var isha                  = raw.Isha;
            var imsakParameterValue   = settings.ImsakParameter.Value;
            var fajrParameterValue    = settings.CalculationMethod.FajrParameter.Value;
            var maghribParameterValue = settings.CalculationMethod.MaghribParameter.Value;
            var ishaParameterValue    = settings.CalculationMethod.IshaParameter.Value;

            // Compute sunrise to sunset difference.
            var diff = DateTimeMath.ComputeDuration(raw.Sunrise, raw.Sunset);

            // Adjust.
            raw.Imsak   = AdjustForHighLatitude(method, imsak, sunrise, imsakParameterValue, diff, Direction.CounterClockwise);
            raw.Fajr    = AdjustForHighLatitude(method, fajr, sunrise, fajrParameterValue, diff, Direction.CounterClockwise);
            raw.Maghrib = AdjustForHighLatitude(method, maghrib, sunset, maghribParameterValue, diff, Direction.Clockwise);
            raw.Isha    = AdjustForHighLatitude(method, isha, sunset, ishaParameterValue, diff, Direction.Clockwise);

            return(raw);
        }
Esempio n. 3
0
        /// <summary>
        /// Adjust calculated prayer time to high latitude adjustment.
        /// </summary>
        private static double AdjustForHighLatitude(HighLatitudeAdjustment method, double time, double baseTime, double angle, double diff, Direction direction)
        {
            // Compute night fraction and duration.
            var nightFraction = AstronomyMath.GetNightFraction(method, angle, diff);
            var duration      = direction == Direction.Clockwise
                               ? DateTimeMath.ComputeDuration(time, baseTime)
                               : DateTimeMath.ComputeDuration(baseTime, time);

            // Copy reference;
            var newTime = time;

            if (duration > nightFraction)
            {
                var adjustment = direction == Direction.Clockwise ? nightFraction : -nightFraction;
                newTime = baseTime + adjustment;
            }

            return(newTime);
        }
Esempio n. 4
0
 public void TestComputeDurationFrom10To23()
 {
     Assert.Equal(13.0, DateTimeMath.ComputeDuration(23.0, 10.0), 5);
 }