time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C语言 > C语言阴阳历算法

C语言阴阳历算法

时间:2009-09-20 23:31 点击:684次 字体:[ ]




      程序为:

    /*

    prototype: int calconv( strUCt convdate * );

    struct convdate
    {
    int source; ==0 则输入日期为西历, !=0 则输入为农历
    int solaryear; 输出或输入之西历年份
    int solarmonth; 西历月
    int solardate; 西历日
    int lunaryear; 输出或输入之农历年份
    int lunarmonth; 农历月
    int lunardate; 农历日
    int weekday; 该日为星期几 ( 0==星期日, 1==星期一, ... )
    int kan; 该日天干 ( 0==甲, 1==乙, ..., 9==癸 )
    int chih; 该日地支 ( 0==子, 1==丑, ..., 11==亥 )
    };

    呼叫时须设定 souce 的值, 若为 0 则为西历转农历, 否则为农历转西历. 然後视
    输入为西历或农历来设定西历或农历的年月日. 转换後的年月日会填入结构中( 农
    历或西历 ), 以及该日为星期几, 天干地支.
    若函式的返回值为 0 表示没有错误, 1 为输入之年份错误, 2 为输入之月份错误,
    3 为输入之日期错误.
    输入之西历年须在 1937 - 2031 间
    输入之农历年须在 1936 - 2030 间
    若须扩充, 则增加 lunarcal[]

    */

    #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; /* 到西历 1 月 1 日到农历正月初一的累积日数 */
    int intercalation; /* 闰月月份. 0==此年没有闰月 */
    int baseweekday; /* 此年西历 1 月 1 日为星期几再减 1 */
    int basekanchih; /* 此年西历 1 月 1 日之干支序号减 1 */
    int monthdays[13]; /* 此农历年每月之大小, 0==小月(29日), 1==大月(30日)*/
    };

    struct taglunarcal lunarcal[] = {
    { 23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0 }, /* 1936 */
    { 41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1 },
    { 30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 },
    { 49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },
    { 38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 }, /* 1940 */
    { 26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0 },
    { 45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
    { 35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 },
    { 24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1 }, /* 1944 */
    { 43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1 },
    { 32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1 },
    { 21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 },
    { 40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1 }, /* 1948 */
    { 28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1 },
    { 47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1 },
    { 36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
    { 26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 }, /* 1952 */
    { 44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1 },
    { 33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0 },
    { 23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 },
    { 42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1 }, /* 1956 */
    { 30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 },
    { 48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 },
    { 38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
    { 27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }, /* 1960 */
    { 45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0 },
    { 35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },
    { 24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 },
    { 43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0 }, /* 1964 */
    { 32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
    { 20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0 },



本文地址 : http://www.fengfly.com/plus/view-77268-1.html
标签: C语言 阴阳历算法
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:
本栏分类