A Java library for calculation of sun and moon positions and phases.
- Lightweight, only requires Java 1.7 or higher, no other dependencies
- Android compatible, requires API level 11 (Honeycomb) or higher. Lower API levels may work as well, but this is untested.
- Available at Maven Central
- Extensive unit tests
Astronomical calculations are far more complex than throwing a few numbers into an obscure formula and then getting a fully accurate result. There is always a tradeoff between accuracy and computing time.
This library has its focus on getting acceptable results at low cost, so it can also run on mobile devices, or devices with a low computing power. The results have an accuracy of about a minute, which should be good enough for common applications (like sunrise/sunset timers), but is probably not sufficient for astronomical purposes.
If you are looking for the highest possible accuracy, you are looking for a different library.
This library consists of a few models, all of them are invoked the same way:
Date date = // requested date of calculation double lat, lng = // geolocation SunPosition position = SunPosition.compute() .on(date) // set a date .at(lat, lng) // set a location .execute(); // get the results System.out.println("Elevation: " + position.getElevation() + "°"); System.out.println("Azimuth: " + position.getAzimuth() + "°");
See the online documentation for examples and API details.
See the migration guide for how to migrate from a previous version.
This library bases on:
- "Astronomy on the Personal Computer", 4th edition, by Oliver Montenbruck and Thomas Pfleger
- "Astronomical Algorithms" by Jean Meeus
- Fork the Source code at GitHub. Feel free to send pull requests.
- Found a bug? File a bug report.
- Are you getting different results from another library or web site? If you file a bug, please try to explain why you think the commons-suncalc result is wrong.
commons-suncalc is open source software. The source code is distributed under the terms of Apache License 2.0.