Example #1
0
        public void Get_Sun_Phases_Adjusts_Sun_Phases_When_Additionally_Given_The_Observer_Height()
        {
            //Arrange
            var heightTestData = new List <SunPhase>
            {
                new SunPhase(SunPhaseName.SolarNoon, new DateTime(2013, 3, 5, 10, 10, 57, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Nadir, new DateTime(2013, 3, 4, 22, 10, 57, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Sunrise, new DateTime(2013, 3, 5, 4, 25, 7, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Sunset, new DateTime(2013, 3, 5, 15, 56, 46, DateTimeKind.Utc))
            };

            var date   = new DateTime(2013, 3, 5, 0, 0, 0, DateTimeKind.Utc);
            var lat    = 50.5;
            var lng    = 30.5;
            var height = 2000;

            //Act
            var sunPhases = SunCalc.GetSunPhases(date, lat, lng, height).ToList();

            //Assert
            foreach (var testSunPhase in heightTestData)
            {
                var sunPhaseValue = sunPhases.First(x => x.Name.Value == testSunPhase.Name.Value);

                var testDataPhaseTime = testSunPhase.PhaseTime.ToString("yyyy-MM-dd hh:mm:ss");
                var sunPhaseTime      = sunPhaseValue.PhaseTime.ToString("yyyy-MM-dd hh:mm:ss");
                Assert.Equal(testDataPhaseTime, sunPhaseTime);
            }
        }
Example #2
0
        public void Get_Sun_Phases_Works_At_North_Pole()
        {
            //Arrange
            var date = new DateTime(2013, 3, 5, 0, 0, 0, DateTimeKind.Utc);
            var lat  = 90;
            var lng  = 135;

            //Act
            var sunPhases = SunCalc.GetSunPhases(date, lat, lng).ToList();

            //Assert
            Assert.Equal(2, sunPhases.Count);
        }
        /// <summary>
        /// Wrapper for SunCalc.GetSunPhases(), returning all SunPhases in Local time and
        /// implementing workaround for bug mentioned here: https://github.com/mourner/suncalc/issues/11#issue-22960903
        /// </summary>
        /// <param name="date">the day to get sun phases for, represented in Local time</param>
        /// <param name="lat"></param>
        /// <param name="lng"></param>
        /// <param name="height"></param>
        /// <returns>all SunPhases for the given day, represented in Local time</returns>
        public static IEnumerable <SunPhase> GetSunPhases(DateTime date, double lat, double lng, double height = 0)
        {
            // Report possible error
            if (date.Kind != DateTimeKind.Local)
            {
                Console.Error.WriteLine("SunCalcHelper.GetSunPhases(): date should be in Local time");
            }

            DateTime noon = new DateTime(date.Year, date.Month, date.Day, 12, 0, 0); // noon of the given DateTime's day
            //return SunCalc.GetSunPhases(noon, lat, lng, height); // note: uncommenting this should make tests fail

            // Convert all SunPhases returned by SunCalc to Local time...
            var             phases = SunCalc.GetSunPhases(noon, lat, lng, height);
            List <SunPhase> result = new List <SunPhase>();

            foreach (SunPhase phase in phases)
            {
                result.Add(new SunPhase(phase.Name, phase.PhaseTime.ToLocalTime()));
            }
            return(result);
        }
Example #4
0
        public void Get_Sun_Phases_Returns_Sun_Phases_For_The_Given_Date_And_Location()
        {
            //Arrange
            var testData = new List <SunPhase>
            {
                new SunPhase(SunPhaseName.SolarNoon, new DateTime(2013, 3, 5, 10, 10, 57, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Nadir, new DateTime(2013, 3, 4, 22, 10, 57, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Sunrise, new DateTime(2013, 3, 5, 4, 34, 56, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Sunset, new DateTime(2013, 3, 5, 15, 46, 57, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.SunriseEnd, new DateTime(2013, 3, 5, 4, 38, 19, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.SunsetStart, new DateTime(2013, 3, 5, 15, 43, 34, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Dawn, new DateTime(2013, 3, 5, 4, 2, 17, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Dusk, new DateTime(2013, 3, 5, 16, 19, 36, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.NauticalDawn, new DateTime(2013, 3, 5, 3, 24, 31, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.NauticalDusk, new DateTime(2013, 3, 5, 16, 57, 22, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.NightEnd, new DateTime(2013, 3, 5, 2, 46, 17, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.Night, new DateTime(2013, 3, 5, 17, 35, 36, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.GoldenHourEnd, new DateTime(2013, 3, 5, 5, 19, 01, DateTimeKind.Utc)),
                new SunPhase(SunPhaseName.GoldenHour, new DateTime(2013, 3, 5, 15, 2, 52, DateTimeKind.Utc)),
            };

            var date = new DateTime(2013, 3, 5, 0, 0, 0, DateTimeKind.Utc);
            var lat  = 50.5;
            var lng  = 30.5;

            //Act
            var sunPhases = SunCalc.GetSunPhases(date, lat, lng).ToList();

            //Assert
            foreach (var testSunPhase in testData)
            {
                var sunPhaseValue = sunPhases.First(x => x.Name.Value == testSunPhase.Name.Value);

                var testDataPhaseTime = testSunPhase.PhaseTime.ToString("yyyy-MM-dd hh:mm:ss");
                var sunPhaseTime      = sunPhaseValue.PhaseTime.ToString("yyyy-MM-dd hh:mm:ss");
                Assert.Equal(testDataPhaseTime, sunPhaseTime);
            }
        }
Example #5
0
        public static IEnumerable <SunPhase> GetSunPhases(Location location)
        {
            var sunPhases = SunCalc.GetSunPhases(DateTime.Now, location.Lat, location.Long).ToList();

            return(sunPhases.Select(sp => new SunPhase(sp.Name, sp.PhaseTime.ToLocalTime())).OrderBy(sp => sp.PhaseTime));
        }