public void TestSolarTimes_PositiveLatLong() { // set up double latitude = 48.137222; // munich double longitude = 11.575556; var date1 = new DateTimeOffset(2020, 7, 31, 12, 0, 0, TimeSpan.FromHours(2.0)); // MESZ var date2 = new DateTimeOffset(2020, 12, 5, 12, 0, 0, TimeSpan.FromHours(1.0)); // MEZ // run var times1 = SunCalc.GetTimes(date1, latitude, longitude); var times2 = SunCalc.GetTimes(date2, latitude, longitude); // check // 2020-07-31: 05:48 - 20:50 Assert.IsTrue(times1.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times1.Sunrise.Value, 5, 48), "sunrise time must match"); Assert.IsTrue(times1.Sunset.HasValue, "sunset must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times1.Sunset.Value, 20, 50), "sunset time must match"); // 2020-12-05: 07:48 - 16:20 Assert.IsTrue(times2.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times2.Sunrise.Value, 7, 48), "sunrise time must match"); Assert.IsTrue(times2.Sunset.HasValue, "sunset must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times2.Sunset.Value, 16, 20), "sunset time must match"); }
public void GetTimes_returns_null_if_event_does_not_occur() { var times = SunCalc.GetTimes(DateTime.Parse("2020-05-21 12:00:00"), 51.9947, -1.4819); times.Night.Should().BeNull(); times.NightEnd.Should().BeNull(); }
public void TestSolarTimes_NearEquator() { // set up double latitude = -8.506810; // Ubud, Bali, Indonesia double longitude = 115.262482; var date = new DateTimeOffset(2020, 7, 1, 12, 0, 0, TimeSpan.FromHours(8)); // run var times = SunCalc.GetTimes(date, latitude, longitude); // check // 2020-07-01: 06:33 - 18:11 Assert.IsTrue(times.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times.Sunrise.Value, 6, 33), "sunrise time must match"); Assert.IsTrue(times.Sunset.HasValue, "sunset must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times.Sunset.Value, 18, 11), "sunset time must match"); TimeSpan sunriseDuration = times.SunriseSunsetTimes[SunTimeType.SunriseEnd] - times.Sunrise.Value; TimeSpan sunsetDuration = times.Sunset.Value - times.SunriseSunsetTimes[SunTimeType.SunsetStart]; Assert.AreEqual(2.3, sunriseDuration.TotalMinutes, 0.1, "sunrise duration must be 2.3 minutes"); Assert.AreEqual(2.3, sunsetDuration.TotalMinutes, 0.1, "sunset duration must be 2.3 minutes"); }
public void TestSolarTimes_AllDayUp_AllDayDown() { // set up double latitude = -70.674444; // Neumayer-Station III double longitude = -8.274167; var date1 = new DateTimeOffset(2020, 6, 21, 12, 0, 0, TimeSpan.Zero); // UTC var date2 = new DateTimeOffset(2020, 12, 21, 12, 0, 0, TimeSpan.Zero); // run var times1 = SunCalc.GetTimes(date1, latitude, longitude); var times2 = SunCalc.GetTimes(date2, latitude, longitude); // check // midwinter Assert.IsFalse(times1.Sunrise.HasValue, "sunrise must not have been set"); Assert.IsFalse(times1.Sunset.HasValue, "sunset must not have been set"); // midsummer Assert.IsFalse(times2.Sunrise.HasValue, "sunrise must not have been set"); Assert.IsFalse(times2.Sunset.HasValue, "sunset must not have been set"); // the difference between midwinter and midsummer is that midwinter has no Night times set Assert.IsTrue(times1.SunriseSunsetTimes.ContainsKey(SunTimeType.Night), "midwinter has a Night time set"); Assert.IsFalse(times2.SunriseSunsetTimes.ContainsKey(SunTimeType.Night), "midsummer has no Night time set"); }
public void GetTimes_adjusts_sun_phases_when_additionally_given_the_observer_height() { var times = SunCalc.GetTimes(_date, _lat, _lng, _height); times.SolarNoon.ToDateString().Should().Be("2013-03-05T10:10:57Z"); times.Nadir.ToDateString().Should().Be("2013-03-04T22:10:57Z"); times.Sunrise.ToDateString().Should().Be("2013-03-05T04:25:07Z"); times.Sunset.ToDateString().Should().Be("2013-03-05T15:56:46Z"); }
public void TestSolarTimes_HeightAboveHorizon() { // set up double latitude = 48.137222; double longitude = 11.575556; var date = new DateTimeOffset(2020, 7, 31, 12, 0, 0, TimeSpan.FromHours(2.0)); // run var times1 = SunCalc.GetTimes(date, latitude, longitude); var times2 = SunCalc.GetTimes(date, latitude, longitude, 100.0); // check TimeSpan deltaSunrise = times2.Sunrise.Value - times1.Sunrise.Value; TimeSpan deltaSunset = times2.Sunset.Value - times1.Sunset.Value; Assert.AreEqual(-2.3, deltaSunrise.TotalMinutes, 0.1, "sunrise 100m above must be 2 minutes earlier"); Assert.AreEqual(2.3, deltaSunset.TotalMinutes, 0.1, "sunset 100m above must be 2 minutes later"); }
public void TestSolarTimes_DayWithLastSunrise() { // set up double latitude = 79.988889; // Eureka, Nunavut, Canada double longitude = -85.940833; var date = new DateTimeOffset(2020, 4, 12, 12, 0, 0, TimeSpan.FromHours(-5)); // run var times = SunCalc.GetTimes(date, latitude, longitude); // check // 2020-04-12: 01:41 - no sunset Assert.IsTrue(times.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times.Sunrise.Value, 1, 41), "sunrise time must match"); //// strange, timeanddate has no sunset value; might be a bug? ////Assert.IsFalse(times.Sunset.HasValue, "sunset must have been set"); }
public void TestSolarTimes_SunsetOnTheNextDay() { // set up double latitude = 64.475528; // somewhere in iceland double longitude = -20.253140; var date = new DateTimeOffset(2020, 6, 21, 12, 0, 0, TimeSpan.Zero); // GMT // run var times = SunCalc.GetTimes(date, latitude, longitude); // check // 2020-07-31: 02:39 - 00:05 (+1 day) Assert.IsTrue(times.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times.Sunrise.Value, 2, 39), "sunrise time must match"); Assert.IsTrue(times.Sunset.HasValue, "sunset must have been set"); Assert.AreEqual(date.DayOfYear + 1, times.Sunset.Value.DayOfYear, "sunset must be one day ahead"); Assert.IsTrue(CheckMatchingTimeOfDay(times.Sunset.Value, 0, 5), "sunset time must match"); }
public void TestSolarTimes_BeforeAndAfterTimezoneChange() { // set up double latitude = 48.137222; // munich double longitude = 11.575556; var date1 = new DateTimeOffset(2020, 10, 24, 12, 0, 0, TimeSpan.FromHours(2.0)); // MESZ var date2 = new DateTimeOffset(2020, 10, 25, 12, 0, 0, TimeSpan.FromHours(1.0)); // MEZ // run var times1 = SunCalc.GetTimes(date1, latitude, longitude); var times2 = SunCalc.GetTimes(date2, latitude, longitude); // check // 2020-10-24: 07:47 - 18:07 Assert.IsTrue(times1.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times1.Sunrise.Value, 7, 47), "sunrise time must match"); Assert.IsTrue(times1.Sunset.HasValue, "sunset must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times1.Sunset.Value, 18, 7), "sunset time must match"); // 2020-10-25: 06:48 - 17:06 Assert.IsTrue(times2.Sunrise.HasValue, "sunrise must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times2.Sunrise.Value, 6, 48), "sunrise time must match"); Assert.IsTrue(times2.Sunset.HasValue, "sunset must have been set"); Assert.IsTrue(CheckMatchingTimeOfDay(times2.Sunset.Value, 17, 06), "sunset time must match"); // difference must be (about) one hour backwards Assert.AreEqual( -1.0, (times2.Sunrise.Value.TimeOfDay - times1.Sunrise.Value.TimeOfDay).TotalHours, 0.1, "sunrise time zone difference must be 1h"); Assert.AreEqual( -1.0, (times2.Sunset.Value.TimeOfDay - times1.Sunset.Value.TimeOfDay).TotalHours, 0.1, "sunset time zone difference must be 1h"); }
public void GetTimes_returns_SunsetStart_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.SunsetStart.ToDateString().Should().Be("2013-03-05T15:43:34Z"); }
public void GetTimes_returns_SunriseEnd_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.SunriseEnd.ToDateString().Should().Be("2013-03-05T04:38:19Z"); }
public void GetTimes_returns_Nadir_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.Nadir.ToDateString().Should().Be("2013-03-04T22:10:57Z"); }
public void GetTimes_returns_SolarNoon_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.SolarNoon.ToDateString().Should().Be("2013-03-05T10:10:57Z"); }
public void GetTimes_returns_NightEnd_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.NightEnd.ToDateString().Should().Be("2013-03-05T02:46:17Z"); }
public void GetTimes_returns_Dusk_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.Dusk.ToDateString().Should().Be("2013-03-05T16:19:36Z"); }
public void GetTimes_returns_NauticalDawn_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.NauticalDawn.ToDateString().Should().Be("2013-03-05T03:24:31Z"); }
public void GetTimes_returns_GoldenHour_for_the_given_date_and_location() { var times = SunCalc.GetTimes(_date, _lat, _lng); times.GoldenHour.ToDateString().Should().Be("2013-03-05T15:02:52Z"); }