Program:
// Calendar lunar Conversion Program
Prototype: int calconv (struct convdate *);
Struct convdate
{
Int source; = 0, the input date is the West calendar ,! If the value is 0, the input is the lunar calendar.
Int solaryear; Year of the input or output calendar
Int solarmonth; calendar month
Int solardate; calendar day
Int lunaryear; Year of the input or output calendar year
Int lunarmonth; lunar month
Int lunardate; lunar day
Int weekday; the day of the week (0 = Sunday, 1 = Monday ,...)
Int kan; dry day (0 = A, 1 = B,..., 9 =)
Int chih; Day (0 = Child, 1 = ugly,..., 11 = Hai)
};
The value of souce must be set during the call. If it is 0, it is the conversion from the West calendar to the lunar calendar. Otherwise, it is the conversion from the lunar calendar to the west calendar.
Enter the year, month, and day of the West or lunar calendar. The year, month, and day after the conversion will be filled in the structure (
And the day of the week.
If the return value of the function is 0, it indicates that there is no error. 1 indicates that the input year is incorrect, and 2 indicates that the input month is incorrect,
3. The input date is incorrect.
The entered calendar year must be in the range of 1937-2031
The input calendar year must be between 1936 and 2030
If expansion is required, lunarcal [] is added.
*/
# Define firstyear 1936/* the first year in lunarcal [] */
Struct convdate
{
Int source;
Int solaryear;
Int solarmonth;
Int solardate;
Int lunaryear;
Int lunarmonth;
Int lunardate;
Int weekday;
Int kan;
Int chih;
};
Struct taglunarcal
{
Int basedays;/* cumulative number of days from January 1 to lunar January 1 x */
Int intercalation;/* leap month. 0 = No leap month in this year */
Int baseweekday;/* the day of the week minus 1 in the calendar month */
Int basekanchih;/* The number of the trunk branch number minus 1 */
Int monthdays [13];/* the monthly size of this Lunar year, 0 = Small month (29 days), 1 = large month (30 days )*/
};
Struct taglunarcal lunarcal [] = {
{23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0 }, /X 1936 */
{41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 },
{30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1 },
{38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1 }, /X 1940 */
{26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0 },
{45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0 },
{35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1 },
{24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, /X 1944 */
{43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
{32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1 },
{40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, /X 1948 */
{28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1 },
{47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1 },
{36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0 },
{26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1 }, /X 1952 */
{44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1 },
{33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0 },
{23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1 },
{42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1 }, /X 1956 */
{30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
{48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1 },
{27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0 }, /X 1960 */
{45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0 },
{35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 },
{24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0 }, /X 1964 */
{32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0 },
{20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0 },
{39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0 },
{29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, /X 1968 */
{47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1 },
{36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 },
{26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1 },
{45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /X 1972 */
{33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1 },
{41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1 },
{30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1 }, /X 1976 */
{48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1 },
{37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 0, 1 },
{27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0 },
{46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0 }, /X 1980 */
{35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
{24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1 },
{43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1 },
{32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1 }, /X 1984 */
{50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0 },
{39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1 },
{28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0 },
{47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, /X 1988 */
{36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0 },
{26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1 },
{45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 },
{34, 0, 2, 11, 0, 1, 1, 0, 1, 0, 0, 1, 0 }, /X 1992 */
{22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0 },
{40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0 },
{30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 0, 0 },
{49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, /X 1996 */
{37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
{46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1 }, /X 2000 */
{23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1 },
{42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1 },
{31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0 },
{21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, /X 2004 */
{39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1 },
{28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
{37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1 }, /X 2008 */
{25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1 },
{44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1 },
{33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1 },
{22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 0 }, /X 2012 */
{40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0 },
{30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1 },
{49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
{38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0 }, /X 2016 */
{27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1 },
{46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0 },
{24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1 }, /X 2020 */
{42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1 },
{31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0 },
{21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1 },
{40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }, /X 2024 */
{28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
{47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
{36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1 },
{25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0 }, /X 2028 */
{43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1 },
{32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 0 },