示例#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);
        }
        /// <summary>
        /// Estimates the duration of a transaction based on its segments.
        /// </summary>
        /// <returns>An estimate of the duration of a transaction.</returns>
        private static TimeSpan GetEstimatedTransactionDuration(IInternalTransaction internalTransaction, Segment lastStartedSegment, Segment lastFinishedSegment)
        {
            if (lastStartedSegment == null && lastFinishedSegment == null)
            {
                return(TimeSpan.FromMilliseconds(1));
            }

            var immutableTransaction = internalTransaction.ConvertToImmutableTransaction();

            var lastStartedSegmentEndTime  = lastStartedSegment?.CalculatedRelativeEndTime ?? new TimeSpan();
            var lastFinishedSegmentEndTime = lastFinishedSegment?.CalculatedRelativeEndTime ?? new TimeSpan();
            var maxEndTime = DateTimeMath.Max(lastStartedSegmentEndTime, lastFinishedSegmentEndTime);

            return(maxEndTime);
        }
示例#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);
        }
示例#4
0
 public void TestComputeDurationFrom10To23()
 {
     Assert.Equal(13.0, DateTimeMath.ComputeDuration(23.0, 10.0), 5);
 }
示例#5
0
 public void TestFixHourPositive27()
 {
     Assert.Equal(3.0, DateTimeMath.FixHour(27.0), 5);
 }
示例#6
0
 public void TestFixHourPositive10()
 {
     Assert.Equal(10.0, DateTimeMath.FixHour(10.0), 5);
 }
示例#7
0
 public void TestFixHourNegative10()
 {
     Assert.Equal(14.0, DateTimeMath.FixHour(-10.0), 5);
 }
示例#8
0
 public void TestFixHourNegative36()
 {
     Assert.Equal(12.0, DateTimeMath.FixHour(-36.0), 5);
 }