• Articles • Articles about computing

# Solunar - a simple command-line utility for calculating Sun and Moon rise and set, and related times

`solunar` is a simple, command-line utility for rapidly displaying sun- and moon-related data, such as sunset times and equinoxes. It builds under Cygwin on Windows, and on most Linux platforms. `solunar` produces output that can be readily parsed by scripts, although it is reasonably human-readable. The utility contains a database of city locations, so locations can be specified by name, rather than latitude and longitude, although specific latitude and longitude can also be specified if required.

`Solunar` can also calculate the dates of lunar-related events such as Easter.

### Basic usage

Get sun and moon rise and set times, etc., in London, on the current day:

    $ solunar -c london
    Selected city Europe/London
    Using location 51:30N,000:07W
    Date/time Mon May 21 13:52:52 2012 local

    Today
                              Date: Monday 21 May 2012

    Sun
                           Sunrise: 04:59
                            Sunset: 20:52

    Moon
                        Moon phase: 0.02 new
                           Moonset: 05:10
                           Moonset: 21:36

Partial city names can be given, so long as the name is unambiguous. To see a full list of city names, run `solunar --cities`.

Get sun and moon rise and set times, etc., in Paris, on January 1st, this year:

    solunar -c paris -d "jan 1"

Get detailed information for location

    solunar -c paris -d "jan 1"

Get brief information for location 51.0 degrees north, 1.5 degrees west:

    solunar -l 51.0,-1.5 -d "jan 1"

Note that southerly latitudes are negative, as are westerly longitudes. For more information on the accepted lat/long formats, run `solunar -l help`. Note also that when latitude and longitude are given, the times displayed are in the default timezone, whether or not the specified point is in that timezone. If it isn't, you probably need to use the `-u` switch to get the times in UTC, then convert appropriately. In practice, the use of `-c` to set a city is more convenient, unless there really is no city within a hundred miles or so of the location.

To get a list of equinoxes, etc., for the current year:

    solunar --days

This also displays the dates of festivals like Easter which are derived from the lunar calendar. However, this dating of Easter is the conventional Western one, and not all locations observe the same date, even when they observe Easter.

For a full list of command-line switches:

    solunar --longhelp

### Compiling

The usual:

    % make
    # make install

Note that `solunar` uses GNU-cc specific methods of handling time and date, and requires a Posix timezone database. Consequently it won't build under MinGW (and won't work even if it can be made to build). Interestingly it will build for Android using the Native Development Kit, and does seem to work correctly. Of course, that's only useful if you routinely use the command prompt on Android. `solunar` may build on other Posix-like plaforms, perhaps with changes to the Makefile.

### Notes on the calculations

The calculations are all based on published algorithms, and I have checked them against reliable data sources so far as possible. There are potential sources of error that the program can't control, and some issues of interpretation.

The most troublesome potential source of error is the system's timezone database. By default, results are worked out in UTC and then converted to the local time of the specified city. This relies on the system's own time and date being correct, and having a proper understanding of daylight savings changes. In general, these issues seems to be handled reasonably well in modern Linux distributions, but there's not much `solunar` can do if the platform data is incorrect.

Issues of interpretation include those relating to uncertainty about exactly what position of the sun in the sky constitudes sunset. The sun is not a uniform disc, so there has to be a convention for the angle of zenith that we take as sunset. Most publications that give sunset times seem to take the Zenith angle as 90 degrees and 50 minutes, so `solunar` does the same. However, the `--full` switch will make it display sunset according to other popular zeniths. In particular, civil twilight has a zenith 6 degrees below conventional sunset, and denotes the time before which outdoor activities are reasonably practicable. Nautical and astonomical twilight have zeniths 12 and 18 degrees below conventional sunset. In practice, many parts of the world will experience no astronomical sunset for at least part of the year. Some, of course, experience no sunset at all for part of the year.

### Limitations

- Events like equinoxes are displayed to the nearest minute but, in fact, it's hard to get an accuracy of better than 30 minutes or so. These are annual events, after all.
- The --days switch produces a list for the current year. To get a list for a different year, you will need to specify a full date in that year, even though only the year part will be used.
- Times are displayed either as UTC, or local to the specified city. There is no way to get the times of events in one location relative to a different one. `solunar` is not intended to be a general timezone converter.
- If a date is specified but no time, then the time is taken to be 2AM, local time. So, for example, the distance from the earth to the moon will be given at 2AM on the specificed day. In practice, this seems highly unlikely to be significant. The use of 2AM, rather than midnight, is so the user is less likely to be surprised when selecting a day at the boundary between daylight savings changes. Midnight local time might end up being in an unexpected day.

### Legal

`solunar` is copyright (c)2005-2012 Kevin Boone, and is released under the GNU Public Licence, version 2.0. That means, essentially, that you are welcome to use this program however you see fit, at your own risk, so long as you do not redistribute it without acknowledging the original author.

The algorithms used in the program are published in various textbooks and, so far as I know, there are no particular legal restrictions on their use and distribution.

### Downloads

- Windows (Cygwin) binary
- Source code