Beispiel #1
0
        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();
        }
Beispiel #3
0
        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");
        }
Beispiel #4
0
        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");
        }
Beispiel #6
0
        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");
        }
Beispiel #7
0
        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");
        }
Beispiel #8
0
        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");
        }
Beispiel #9
0
        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");
        }