1.\" Copyright (c) 1997 Wolfgang Helbig 2.\" All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" 25.\" $FreeBSD$ 26.\" 27.Dd November 29, 1997 28.Dt CALENDAR 3 29.Os 30.Sh NAME 31.Nm easterg , 32.Nm easterog , 33.Nm easteroj , 34.Nm gdate , 35.Nm jdate , 36.Nm ndaysg , 37.Nm ndaysj , 38.Nm week , 39.Nm weekday 40.Nd Calendar arithmetic for the Christian era 41.Sh LIBRARY 42.Lb libcalendar 43.Sh SYNOPSIS 44.In calendar.h 45.Ft struct date * 46.Fn easterg "int year" "struct date *dt" 47.Ft struct date * 48.Fn easterog "int year" "struct date *dt" 49.Ft struct date * 50.Fn easteroj "int year" "struct date *dt" 51.Ft struct date * 52.Fn gdate "int nd" "struct date *dt" 53.Ft struct date * 54.Fn jdate "int nd" "struct date *dt" 55.Ft int 56.Fn ndaysg "struct date *dt" 57.Ft int 58.Fn ndaysj "struct date *dt" 59.Ft int 60.Fn week "int nd" "int *year" 61.Ft int 62.Fn weekday "int nd" 63.Sh DESCRIPTION 64These functions provide calendar arithmetic for a large range of years, 65starting at March 1st, year zero (i. e. 1 B.C.) and ending way beyond 66year 100000. 67.Pp 68Programs should be linked with 69.Fl lcalendar . 70.Pp 71The functions 72.Fn easterg , 73.Fn easterog 74and 75.Fn easteroj 76store the date of Easter Sunday into the structure pointed at by 77.Fa dt 78and return a pointer to this structure. 79The function 80.Fn easterg 81assumes Gregorian Calendar (adopted by most western churches after 1582) and 82the functions 83.Fn easterog 84and 85.Fn easteroj 86compute the date of Easter Sunday according to the orthodox rules 87(Western churches before 1582, Greek and Russian Orthodox Church 88until today). 89The result returned by 90.Fn easterog 91is the date in Gregorian Calendar, whereas 92.Fn easteroj 93returns the date in Julian Calendar. 94.Pp 95The functions 96.Fn gdate , 97.Fn jdate , 98.Fn ndaysg 99and 100.Fn ndaysj 101provide conversions between the common "year, month, day" notation 102of a date and the "number of days" representation, which is better suited 103for calculations. 104The days are numbered from March 1st year 1 B.C., starting 105with zero, so the number of a day gives the number of days since March 1st, 106year 1 B.C. The conversions work for nonnegative day numbers only. 107.Pp 108The 109.Fn gdate 110and 111.Fn jdate 112functions 113store the date corresponding to the day number 114.Fa nd 115into the structure pointed at by 116.Fa dt 117and return a pointer to this structure. 118.Pp 119The 120.Fn ndaysg 121and 122.Fn ndaysj 123functions 124return the day number of the date pointed at by 125.Fa dt . 126.Pp 127The 128.Fn gdate 129and 130.Fn ndaysg 131functions 132assume Gregorian Calendar after October 4, 1582 and Julian Calendar before, 133whereas 134.Fn jdate 135and 136.Fn ndaysj 137assume Julian Calendar throughout. 138.Pp 139The two calendars differ by the definition of the leap year. 140The 141Julian Calendar says every year that is a multiple of four is a 142leap year. 143The Gregorian Calendar excludes years that are multiples of 144100 and not multiples of 400. 145This means the years 1700, 1800, 1900, 2100 are not leap years 146and the year 2000 is 147a leap year. 148The new rules were inaugurated on October 4, 1582 by deleting ten 149days following this date. 150Most catholic countries adopted the new 151calendar by the end of the 16th century, whereas others stayed with 152the Julian Calendar until the 20th century. 153The United Kingdom and 154their colonies switched on September 2, 1752. They already had to 155delete 11 days. 156.Pp 157The function 158.Fn week 159returns the number of the week which contains the day numbered 160.Fa nd . 161The argument 162.Fa *year 163is set with the year that contains (the greater part of) the week. 164The weeks are numbered per year starting with week 1, which is the 165first week in a year that includes more than three days of the year. 166Weeks start on Monday. 167This function is defined for Gregorian Calendar only. 168.Pp 169The function 170.Fn weekday 171returns the weekday (Mo = 0 .. Su = 6) of the day numbered 172.Fa nd . 173.Pp 174The structure 175.Fa date 176is defined in 177.In calendar.h . 178It contains these fields: 179.Bd -literal -offset indent 180int y; /\(** year (0000 - ????) \(**/ 181int m; /\(** month (1 - 12) \(**/ 182int d; /\(** day of month (1 - 31) \(**/ 183.Ed 184.Pp 185The year zero is written as "1 B.C." by historians and "0" by astronomers 186and in this library. 187.Sh SEE ALSO 188.Xr ncal 1 , 189.Xr strftime 3 190.Sh STANDARDS 191The week number conforms to ISO 8601: 1988. 192.Sh HISTORY 193The 194.Nm calendar 195library first appeared in 196.Fx 3.0 . 197.Sh AUTHORS 198This manual page and the library was written by 199.An Wolfgang Helbig Aq helbig@FreeBSD.org . 200.Sh BUGS 201The library was coded with great care so there are no bugs left. 202