caldate_mjd 3 library functions djbwares
caldate_mjd manipulate calendar dates

    #include <caldate.h>

void `caldate_frommjd` struct caldate *cd long day int *weekday int *yearday long `caldate_mjd` struct caldate *cd void `caldate_normalize` struct caldate *cd void `caldate_easter` struct caldate *cd

## Basic conversions

Every calendar date has a modified Julian day number. The day number increases by 1 every day. Day number 0 is 17 November 1858. Day number 51604 is 1 March 2000.

`caldate_frommjd` puts into cd the date corresponding to the modified Julian day number day.

`caldate_frommjd` also computes the day of the week (0 through 6) and the day of the year (0 through 365). It stores the day of the week in *weekday if weekday is nonzero. It stores the day of the year in *yearday if yearday is nonzero.

`caldate_mjd` returns the modified Julian day number corresponding to the date in cd.

`caldate_mjd` accepts days outside the range 1 to 31, referring to days before the beginning or after the end of the month. It also accepts months outside the range 1 to 12, referring to months before the beginning or after the end of the year.

`caldate_normalize` calls `caldate_frommjd` with the result of `caldate_mjd`. This means that it accepts out-of-range months and out-of-range days in cd, and puts a valid calendar date back into cd.

## Other functions

`caldate_easter` reads the year from cd and then changes cd to the date of Easter in the same year.

## Limitations

The `caldate` routines currently support the Gregorian calendar, which was defined in 1582 and adopted at different times in different countries. For earlier dates the `caldate` routines work with virtual Gregorian (also known as Proleptic Gregorian), defined mathematically by the 400-year Gregorian cycle for years before 1582. The Julian calendar is not supported.

The Gregorian calendar will be replaced by a new calendar within a few thousand years. The `caldate_frommjd` and `caldate_mjd` routines will be upgraded accordingly. The current `caldate_frommjd` and `caldate_mjd` routines are not useful for dates far in the future.

Day numbers will overflow a 32-bit `long` sometime after the year 5000000; all systems should upgrade to 64-bit `long`s before then. `caldate_mjd` does not check for overflow.

## See also

caldate 3

## Author

Original code and documentation by Daniel J. Bernstein. Converted to DocBook XML by Jonathan de Boyne Pollard.