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); } }
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); }
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); } }
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)); }