Home
Highly Reusable Software By activity User Interface Text Strings Math Processing
Stored Data
Communications
Hard World File System
|
#License - #Source code - #Example Use -
#include <librock/sdncalh.h> void SdnToFrench( long int sdn, int *pYear, int *pMonth, int *pDay); /* * Convert a SDN to a French republican calendar date. If the input SDN is * before the first day of year 1 or after the last day of year 14, the * three output values will all be set to zero, otherwise *pYear will be in * the range 1 to 14 inclusive; *pMonth will be in the range 1 to 13 * inclusive; *pDay will be in the range 1 to 30 inclusive. If *pMonth is * 13, the SDN represents one of the holidays at the end of the year and * *pDay will be in the range 1 to 6 inclusive. */ long int librock_FrenchToSdn( int year, int month, int day); /* * Convert a French republican calendar date to a SDN. Zero is returned * when the input date is detected as invalid or out of the supported * range. The return value will be > 0 for all valid, supported dates, but * there are some invalid dates that will return a positive value. To * verify that a date is valid, convert it to SDN and then back and compare * with the original. */ char *librock_FrenchMonthName[14]; /* * Convert a French republican month number (1 to 13) to the name of the * French republican month (null terminated). An index of 13 (for the * "extra" days at the end of the year) will return the string "Extra". An * index of zero will return a zero length string. */
/* This package defines a set of routines that convert calendar dates to * and from a serial day number (SDN). The SDN is a serial numbering of * days where SDN 1 is November 25, 4714 BC in the Gregorian calendar and * SDN 2447893 is January 1, 1990. This system of day numbering is * sometimes referred to as Julian days, but to avoid confusion with the * Julian calendar, it is referred to as serial day numbers here. The term * Julian days is also used to mean the number of days since the beginning * of the current year. * * The SDN can be used as an intermediate step in converting from one * calendar system to another (such as Gregorian to Jewish). It can also * be used for date computations such as easily comparing two dates, * determining the day of the week, finding the date of yesterday or * calculating the number of days between two dates. * * SDN values less than one are not supported. If a conversion routine * returns an SDN of zero, this means that the date given is either invalid * or is outside the supported range for that calendar. * * At least some validity checks are performed on input dates. For * example, a negative month number will result in the return of zero for * the SDN. A returned SDN greater than one does not necessarily mean that * the input date was valid. To determine if the date is valid, convert it * to SDN, and if the SDN is greater than zero, convert it back to a date * and compare to the original. For example: */ int y1, m1, d1; int y2, m2, d2; long int sdn; ... sdn = GregorianToSdn(y1, m1, d1); if (sdn > 0) { SdnToGregorian(sdn, &y2, &m2, &d2); if (y1 == y2 && m1 == m2 && d1 == d2) { ... date is valid ... } }
/* * These routines only convert dates in years 1 through 14 (Gregorian * dates 22 September 1792 through 22 September 1806). This more than * covers the period when the calendar was in use. * * I would support a wider range of dates, but I have not been able to * find an authoritative definition of when leap years were to have * occurred. There are suggestions that it was to skip a leap year ever * 100 years like the Gregorian calendar. */
/* * The French republican calendar was adopted in October 1793 during * the French Revolution and was abandoned in January 1806. The intent * was to create a new calendar system that was based on scientific * principals, not religious traditions. * * The year is divided into 12 months of 30 days each. The remaining 5 * to 6 days in the year are grouped at the end and are holidays. Each * month is divided into three decades (instead of weeks) of 10 days * each. * * The epoch (first day of the first year) is 22 September 1792 in the * Gregorian calendar. Leap years are every fourth year (year 3, 7, * 11, etc.) */
/* * This algorithm has been tested from the year 1 to 14. The source * code of the verification program is included in the sdncal package. */
/* * I have found no detailed, authoritative reference on this calendar. * The algorithms are based on a preponderance of less authoritative * sources. */
//No external calls
Copyright 1993-1995, Scott E. Lee, all rights reserved. Licensed under BSD-ish license, NO WARRANTY. Copies must retain this block. License text in <librock/license/sdncal.txt> librock_LIDESC_HC=553e181388455f0eef17ccd9e2a51c1f3ae8daf0
Verbatim copying and distribution of this generated page is permitted in any medium provided that no changes are made.
(The source of this manual page may be covered by a more permissive license which allows modifications.)
Want to help? We welcome comments, patches. -- Need help? Request paid support.