diff --git a/src/main/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculator.java b/src/main/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculator.java index e14b0d9..9c64bec 100644 --- a/src/main/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculator.java +++ b/src/main/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculator.java @@ -255,7 +255,7 @@ public Calendar getOfficialSunsetCalendarForDate(Calendar date) { public static Calendar getSunrise(double latitude, double longitude, TimeZone timeZone, Calendar date, double degrees) { SolarEventCalculator solarEventCalculator = new SolarEventCalculator(new Location(latitude, longitude), timeZone); - return solarEventCalculator.computeSunriseCalendar(new Zenith(90 - degrees), date); + return solarEventCalculator.computeSunriseCalendar(new Zenith(90 + degrees), date); } /** @@ -276,7 +276,7 @@ public static Calendar getSunrise(double latitude, double longitude, TimeZone ti public static Calendar getSunset(double latitude, double longitude, TimeZone timeZone, Calendar date, double degrees) { SolarEventCalculator solarEventCalculator = new SolarEventCalculator(new Location(latitude, longitude), timeZone); - return solarEventCalculator.computeSunsetCalendar(new Zenith(90 - degrees), date); + return solarEventCalculator.computeSunsetCalendar(new Zenith(90 + degrees), date); } /** diff --git a/src/test/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculatorTest.java b/src/test/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculatorTest.java index a557222..3e2da43 100644 --- a/src/test/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculatorTest.java +++ b/src/test/java/com/luckycatlabs/sunrisesunset/SunriseSunsetCalculatorTest.java @@ -19,6 +19,7 @@ import static org.junit.Assert.assertEquals; import java.util.Calendar; +import java.util.TimeZone; import org.junit.Before; import org.junit.Test; @@ -80,6 +81,35 @@ public void testComputeOfficialSunset() { assertTimeEquals("18:00", calc.getOfficialSunsetForDate(eventDate), eventDate.getTime().toString()); } + @Test + public void testComputeSunriseArbitraryDegrees() { + TimeZone tz = TimeZone.getTimeZone("America/New_York"); + + assertHourMinuteEquals(calc.getCivilSunriseCalendarForDate(eventDate), + SunriseSunsetCalculator.getSunrise(39.9937, -75.7850, tz, eventDate, 6.0)); + assertHourMinuteEquals(calc.getNauticalSunriseCalendarForDate(eventDate), + SunriseSunsetCalculator.getSunrise(39.9937, -75.7850, tz, eventDate, 12.0)); + assertHourMinuteEquals(calc.getAstronomicalSunriseCalendarForDate(eventDate), + SunriseSunsetCalculator.getSunrise(39.9937, -75.7850, tz, eventDate, 18.0)); + } + + @Test + public void testComputeSunsetArbitraryDegrees() { + TimeZone tz = TimeZone.getTimeZone("America/New_York"); + + assertHourMinuteEquals(calc.getCivilSunsetCalendarForDate(eventDate), + SunriseSunsetCalculator.getSunset(39.9937, -75.7850, tz, eventDate, 6.0)); + assertHourMinuteEquals(calc.getNauticalSunsetCalendarForDate(eventDate), + SunriseSunsetCalculator.getSunset(39.9937, -75.7850, tz, eventDate, 12.0)); + assertHourMinuteEquals(calc.getAstronomicalSunsetCalendarForDate(eventDate), + SunriseSunsetCalculator.getSunset(39.9937, -75.7850, tz, eventDate, 18.0)); + } + + private static void assertHourMinuteEquals(Calendar expected, Calendar actual) { + assertEquals(expected.get(Calendar.HOUR_OF_DAY), actual.get(Calendar.HOUR_OF_DAY)); + assertEquals(expected.get(Calendar.MINUTE), actual.get(Calendar.MINUTE)); + } + @Test public void testSpecificDateLocationAndTimezone() { Location loc = new Location("55.03", "82.91");