/// <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); }
/// <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); }
public void TestComputeDurationFrom10To23() { Assert.Equal(13.0, DateTimeMath.ComputeDuration(23.0, 10.0), 5); }
public void TestFixHourPositive27() { Assert.Equal(3.0, DateTimeMath.FixHour(27.0), 5); }
public void TestFixHourPositive10() { Assert.Equal(10.0, DateTimeMath.FixHour(10.0), 5); }
public void TestFixHourNegative10() { Assert.Equal(14.0, DateTimeMath.FixHour(-10.0), 5); }
public void TestFixHourNegative36() { Assert.Equal(12.0, DateTimeMath.FixHour(-36.0), 5); }