公历转农历算法详解 公历转农历算法c语言_运程_十二生肖

十二生肖>十二星座>运程

公历转农历算法详解 公历转农历算法c语言

时间:2023-10-27 13:24:38 作者:丁志诚

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于公历转农历算法详解 公历转农历算法c语言的文章,本文对文章公历转农历算法详解 公历转农历算法c语言好好的分析和解答,希望你能喜欢,只有你喜欢的内容存在,只有你来光临,我们才能继续前行。

公历转农历算法详解 公历转农历算法c语言

求单片机的公历转农历的c程序,最好多带点注释,谢谢

你可以到百度,谷歌搜索一下,下面是一个参考:

我顺便帮你再找找有没有直接实现农历的芯片,单片机转农历的程序比较麻烦的,有现成的芯片最好

//C51写的公历转农历和星期

#define uint unsigned int

#include <intrins.h>

/*

公历年对应的农历数据,每年三字节,

格式第一字节升缓BIT7-4 位表示闰月月份,值逗差为0 为无闰月,BIT3-0 对应农历第1-4 月的大小

第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小

月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天)

第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期

*/

0x04,0xAe,0x53, //1901 0

0x0A,0x57,0x48, //1902 3

0x55,0x26,0xBd, //1903 6

0x0d,0x26,0x50, //1904 9

0x0d,0x95,0x44, //1905 12

0x46,0xAA,0xB9, //1906 15

0x05,0x6A,0x4d, //1907 18

0x09,0xAd,0x42, //1908 21

0x24,0xAe,0xB6, //1909

0x04,0xAe,0x4A, //1910

0x6A,0x4d,0xBe, //1911

0x0A,0x4d,0x52, //1912

0x0d,0x25,0x46, //1913

0x5d,0x52,0xBA, //1914

0x0B,0x54,0x4e, //1915

0x0d,0x6A,0x43, //1916

0x29,0x6d,0x37, //吵指模1917

0x09,0x5B,0x4B, //1918

0x74,0x9B,0xC1, //1919

0x04,0x97,0x54, //1920

0x0A,0x4B,0x48, //1921

0x5B,0x25,0xBC, //1922

0x06,0xA5,0x50, //1923

0x06,0xd4,0x45, //1924

0x4A,0xdA,0xB8, //1925

0x02,0xB6,0x4d, //1926

0x09,0x57,0x42, //1927

0x24,0x97,0xB7, //1928

0x04,0x97,0x4A, //1929

0x66,0x4B,0x3e, //1930

0x0d,0x4A,0x51, //1931

0x0e,0xA5,0x46, //1932

0x56,0xd4,0xBA, //1933

0x05,0xAd,0x4e, //1934

0x02,0xB6,0x44, //1935

0x39,0x37,0x38, //1936

0x09,0x2e,0x4B, //1937

0x7C,0x96,0xBf, //1938

0x0C,0x95,0x53, //1939

0x0d,0x4A,0x48, //1940

0x6d,0xA5,0x3B, //1941

0x0B,0x55,0x4f, //1942

0x05,0x6A,0x45, //1943

0x4A,0xAd,0xB9, //1944

0x02,0x5d,0x4d, //1945

0x09,0x2d,0x42, //1946

0x2C,0x95,0xB6, //1947

0x0A,0x95,0x4A, //1948

0x7B,0x4A,0xBd, //1949

0x06,0xCA,0x51, //1950

0x0B,0x55,0x46, //1951

0x55,0x5A,0xBB, //1952

0x04,0xdA,0x4e, //1953

0x0A,0x5B,0x43, //1954

0x35,0x2B,0xB8, //1955

0x05,0x2B,0x4C, //1956

0x8A,0x95,0x3f, //1957

0x0e,0x95,0x52, //1958

0x06,0xAA,0x48, //1959

0x7A,0xd5,0x3C, //1960

0x0A,0xB5,0x4f, //1961

0x04,0xB6,0x45, //1962

0x4A,0x57,0x39, //1963

0x0A,0x57,0x4d, //1964

0x05,0x26,0x42, //1965

0x3e,0x93,0x35, //1966

0x0d,0x95,0x49, //1967

0x75,0xAA,0xBe, //1968

0x05,0x6A,0x51, //1969

0x09,0x6d,0x46, //1970

0x54,0xAe,0xBB, //1971

0x04,0xAd,0x4f, //1972

0x0A,0x4d,0x43, //1973

0x4d,0x26,0xB7, //1974

0x0d,0x25,0x4B, //1975

0x8d,0x52,0xBf, //1976

0x0B,0x54,0x52, //1977

0x0B,0x6A,0x47, //1978

0x69,0x6d,0x3C, //1979

0x09,0x5B,0x50, //1980

0x04,0x9B,0x45, //1981

0x4A,0x4B,0xB9, //1982

0x0A,0x4B,0x4d, //1983

0xAB,0x25,0xC2, //1984

0x06,0xA5,0x54, //1985

0x06,0xd4,0x49, //1986

0x6A,0xdA,0x3d, //1987

0x0A,0xB6,0x51, //1988

0x09,0x37,0x46, //1989

0x54,0x97,0xBB, //1990

0x04,0x97,0x4f, //1991

0x06,0x4B,0x44, //1992

0x36,0xA5,0x37, //1993

0x0e,0xA5,0x4A, //1994

0x86,0xB2,0xBf, //1995

0x05,0xAC,0x53, //1996

0x0A,0xB6,0x47, //1997

0x59,0x36,0xBC, //1998

0x09,0x2e,0x50, //1999 294

0x0C,0x96,0x45, //2000 297

0x4d,0x4A,0xB8, //2001

0x0d,0x4A,0x4C, //2002

0x0d,0xA5,0x41, //2003

0x25,0xAA,0xB6, //2004

0x05,0x6A,0x49, //2023

0x7A,0xAd,0xBd, //2023

0x02,0x5d,0x52, //2023

0x09,0x2d,0x47, //2023

0x5C,0x95,0xBA, //2023

0x0A,0x95,0x4e, //2023

0x0B,0x4A,0x43, //2023

0x4B,0x55,0x37, //2023

0x0A,0xd5,0x4A, //2023

0x95,0x5A,0xBf, //2023

0x04,0xBA,0x53, //2023

0x0A,0x5B,0x48, //2023

0x65,0x2B,0xBC, //2023

0x05,0x2B,0x50, //2023

0x0A,0x93,0x45, //2023

0x47,0x4A,0xB9, //2023

0x06,0xAA,0x4C, //2023

0x0A,0xd5,0x41, //2023

0x24,0xdA,0xB6, //2023

0x04,0xB6,0x4A, //2024

0x69,0x57,0x3d, //2025

0x0A,0x4e,0x51, //2026

0x0d,0x26,0x46, //2027

0x5e,0x93,0x3A, //2028

0x0d,0x53,0x4d, //2029

0x05,0xAA,0x43, //2030

0x36,0xB5,0x37, //2031

0x09,0x6d,0x4B, //2032

0xB4,0xAe,0xBf, //2033

0x04,0xAd,0x53, //2034

0x0A,0x4d,0x48, //2035

0x6d,0x25,0xBC, //2036

0x0d,0x25,0x4f, //2037

0x0d,0x52,0x44, //2038

0x5d,0xAA,0x38, //2039

0x0B,0x5A,0x4C, //2040

0x05,0x6d,0x41, //2041

0x24,0xAd,0xB6, //2042

0x04,0x9B,0x4A, //2043

0x7A,0x4B,0xBe, //2044

0x0A,0x4B,0x51, //2045

0x0A,0xA5,0x46, //2046

0x5B,0x52,0xBA, //2047

0x06,0xd2,0x4e, //2048

0x0A,0xdA,0x42, //2049

0x35,0x5B,0x37, //2050

0x09,0x37,0x4B, //2051

0x84,0x97,0xC1, //2052

0x04,0x97,0x53, //2053

0x06,0x4B,0x48, //2054

0x66,0xA5,0x3C, //2055

0x0e,0xA5,0x4f, //2056

0x06,0xB2,0x44, //2057

0x4A,0xB6,0x38, //2058

0x0A,0xAe,0x4C, //2059

0x09,0x2e,0x42, //2060

0x3C,0x97,0x35, //2061

0x0C,0x96,0x49, //2062

0x7d,0x4A,0xBd, //2063

0x0d,0x4A,0x51, //2064

0x0d,0xA5,0x45, //2065

0x55,0xAA,0xBA, //2066

0x05,0x6A,0x4e, //2067

0x0A,0x6d,0x43, //2068

0x45,0x2e,0xB7, //2069

0x05,0x2d,0x4B, //2070

0x8A,0x95,0xBf, //2071

0x0A,0x95,0x53, //2072

0x0B,0x4A,0x47, //2073

0x6B,0x55,0x3B, //2074

0x0A,0xd5,0x4f, //2075

0x05,0x5A,0x45, //2076

0x4A,0x5d,0x38, //2077

0x0A,0x5B,0x4C, //2078

0x05,0x2B,0x42, //2079

0x3A,0x93,0xB6, //2080

0x06,0x93,0x49, //2081

0x77,0x29,0xBd, //2082

0x06,0xAA,0x51, //2083

0x0A,0xd5,0x46, //2084

0x54,0xdA,0xBA, //2085

0x04,0xB6,0x4e, //2086

0x0A,0x57,0x43, //2087

0x45,0x27,0x38, //2088

0x0d,0x26,0x4A, //2089

0x8e,0x93,0x3e, //2090

0x0d,0x52,0x52, //2091

0x0d,0xAA,0x47, //2092

0x66,0xB5,0x3B, //2093

0x05,0x6d,0x4f, //2094

0x04,0xAe,0x45, //2095

0x4A,0x4e,0xB9, //2096

0x0A,0x4d,0x4C, //2097

0x0d,0x15,0x41, //2098

0x2d,0x92,0xB5, //2099

};

///月份数据表

code uint day_code2[3]={0x222,0x130,0x14e};

/*

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=1为19世纪

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据

*/

bit c_moon;

/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/

{

switch (month_p)

{

case 1:{temp=year_code[table_addr]&0x08;

if (temp==0)return(0);else return(1);}

case 2:{temp=year_code[table_addr]&0x04;

if (temp==0)return(0);else return(1);}

case 3:{temp=year_code[table_addr]&0x02;

if (temp==0)return(0);else return(1);}

case 4:{temp=year_code[table_addr]&0x01;

if (temp==0)return(0);else return(1);}

case 5:{temp=year_code[table_addr+1]&0x80;

if (temp==0) return(0);else return(1);}

case 6:{temp=year_code[table_addr+1]&0x40;

if (temp==0)return(0);else return(1);}

case 7:{temp=year_code[table_addr+1]&0x20;

if (temp==0)return(0);else return(1);}

case 8:{temp=year_code[table_addr+1]&0x10;

if (temp==0)return(0);else return(1);}

case 9:{temp=year_code[table_addr+1]&0x08;

if (temp==0)return(0);else return(1);}

case 10:{temp=year_code[table_addr+1]&0x04;

if (temp==0)return(0);else return(1);}

case 11:{temp=year_code[table_addr+1]&0x02;

if (temp==0)return(0);else return(1);}

case 12:{temp=year_code[table_addr+1]&0x01;

if (temp==0)return(0);else return(1);}

case 13:{temp=year_code[table_addr+2]&0x80;

if (temp==0)return(0);else return(1);}

}

}

/*

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=1为19世纪

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据

*/

{ //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据

uint temp4,table_addr;

bit flag2,flag_y;

temp1=year/16; //BCD->hex 先把数据转换为十六进制

temp2=year%16;

year=temp1*10+temp2;

temp1=month/16;

temp2=month%16;

month=temp1*10+temp2;

temp1=day/16;

temp2=day%16;

day=temp1*10+temp2;

//定位数据表地址

if(c==0)

{

table_addr=(year+0x64-1)*0x3;

}

else

{

table_addr=(year-1)*0x3;

}

//定位数据表地址完成

//取当年春节所在的公历月份

temp1=year_code[table_addr+2]&0x60;

temp1=_cror_(temp1,5);

//取当年春节所在的公历月份完成

//取当年春节所在的公历日

temp2=year_code[table_addr+2]&0x1f;

//取当年春节所在的公历日完成

// 计算当年春年离当年元旦的天数,春节只会在公历1月或2月

if(temp1==0x1)

{

temp3=temp2-1;

}

else

{

temp3=temp2+0x1f-1;

}

// 计算当年春年离当年元旦的天数完成

//计算公历日离当年元旦的天数,为了减少运算,用了两个表

//day_code1[9],day_code2[3]

//如果公历月在九月或前,天数会少于0xff,用表day_code1[9],

//在九月后,天数大于0xff,用表day_code2[3]

//如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1

//如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1

if (month<10)

{

temp4=day_code1[month-1]+day-1;

}

else

{

temp4=day_code2[month-10]+day-1;

}

if ((month>0x2)&&(year%0x4==0))

{ //如果公历月大于2月并且该年的2月为闰月,天数加1

temp4+=1;

}

//计算公历日离当年元旦的天数完成

//判断公历日在春节前还是春节后

if (temp4>=temp3)

{ //公历日在春节后或就是春节当日使用下面代码进行运算

temp4-=temp3;

month=0x1;

month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月

flag2=get_moon_day(month_p,table_addr);

//检查该农历月为大小还是小月,大月返回1,小月返回0

flag_y=0;

if(flag2==0)temp1=0x1d; //小月29天

else temp1=0x1e; //大小30天

temp2=year_code[table_addr]&0xf0;

temp2=_cror_(temp2,4); //从数据表中取该年的闰月月份,如为0则该年无闰月

while(temp4>=temp1)

{

temp4-=temp1;

month_p+=1;

if(month==temp2)

{

flag_y=~flag_y;

if(flag_y==0)

month+=1;

}

else month+=1;

flag2=get_moon_day(month_p,table_addr);

if(flag2==0)temp1=0x1d;

else temp1=0x1e;

}

day=temp4+1;

}

else

{ //公历日在春节前使用下面代码进行运算

temp3-=temp4;

if (year==0x0)

{

year=0x63;c=1;

}

else year-=1;

table_addr-=0x3;

month=0xc;

temp2=year_code[table_addr]&0xf0;

temp2=_cror_(temp2,4);

if (temp2==0)

month_p=0xc;

else

month_p=0xd; //

/*month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12*/

flag_y=0;

flag2=get_moon_day(month_p,table_addr);

if(flag2==0)temp1=0x1d;

else temp1=0x1e;

while(temp3>temp1)

{

temp3-=temp1;

month_p-=1;

if(flag_y==0)month-=1;

if(month==temp2)flag_y=~flag_y;

flag2=get_moon_day(month_p,table_addr);

if(flag2==0)temp1=0x1d;

else temp1=0x1e;

}

day=temp1-temp3+1;

}

c_moon=c; //HEX->BCD ,运算结束后,把数据转换为BCD数据

temp1=year/10;

temp1=_crol_(temp1,4);

temp2=year%10;

year_moon=temp1|temp2;

temp1=month/10;

temp1=_crol_(temp1,4);

temp2=month%10;

month_moon=temp1|temp2;

temp1=day/10;

temp1=_crol_(temp1,4);

temp2=day%10;

day_moon=temp1|temp2;

}

/*函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)

调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16);

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=1为19世纪

调用函数后,原有数据不变,读week得出阴历BCD数据

*/

/*

算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在

闰年又不到3 月份上述之和要减一天再除7

星期数为0

*/

{//c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据

temp1=year/16; //BCD->hex 先把数据转换为十六进制

temp2=year%16;

year=temp1*10+temp2;

temp1=month/16;

temp2=month%16;

month=temp1*10+temp2;

temp1=day/16;

temp2=day%16;

day=temp1*10+temp2;

if (c==0){year+=0x64;} //如果为21世纪,年份数加100

temp1=year/0x4; //所过闰年数只算1900年之后的

temp2=year+temp1;

temp2=temp2%0x7; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据

temp2=temp2+day+table_week[month-1];

if (year%0x4==0&&month<3)temp2-=1;

week=temp2%0x7;

}

//test

void main()

{

c_sun=1;

year_sun=0x2;

month_sun=0x11;

day_sun=0x3;

Conver_week(c_sun,year_sun,month_sun,day_sun);

Conversion(c_sun,year_sun,month_sun,day_sun);

while(1);

}

跪求万年历—公历转换器噶C语言程序代码啊!!!

#include <stdio.h>

#include<conio.h>

#include<stdlib.h>

int IsLeapYear(int);

int main()

{

int i;

int day;

int year;

int temp;

int temp_i;

long int Year_days = 0;

int Year_Start = 1;

int Per_Year_Days;

int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};

printf("Please enter the year: ");

scanf("%d",&year);

while(Year_Start < year)

{

if( IsLeapYear( Year_Start ) )

Per_Year_Days = 366;

else

Per_Year_Days = 365;

Year_days = Year_days + Per_Year_Days;

Year_Start++;

}

for( temp = 1; temp <=12; temp++ )

{

switch( temp )

{

case 1:

printf(" January(%d)\n",year);

break;

case 2:

printf(" February(%d)\n",year);

break;

case 3:

printf(" March(%d)\n",year);

break;

case 4:

printf(" April(%d)\n",year);

break;

case 5:

printf(" May(%d)\n"备氏,year);

break;

case 6:

printf(" June(%d)\n",year);

break;

case 7:

printf(" July(%d)\n",year);

break;

case 8:

printf(" August(%d)\n",year);

break;

case 9:

printf(" September(%d)\n",year);

break;

case 10:

printf(" October(%d)\n",year);

break;

case 11:

printf(" November(%d)\n",year);

break;

case 12:

printf(" December(%d)\n",year);

break;

}

i = Year_days % 7;

printf("Mon Tue Wed Thu Fri Sat Sun\n");

if( i != 0 )

for( temp_i = 0; temp_i < i; temp_i++)

printf(" ");

day = 1;

if( IsLeapYear(year) && temp == 2)

while( day <= month_day[12] )

{

if( day >1 )

if( Year_days % 7 == 0 )

printf("\n");

if( day >= 10 )

printf("%d ",day);

else

printf("%d ",day);

Year_days++;

day++;

}

else

while (day <= month_day[temp-1])

{

if( day > 1 )

if( Year_days % 7 == 0 )

printf("仿粗散\n");

if( day >=10 )

printf("%d ",day);

else

printf("%d ",day);

Year_days++;

day++;

}

printf("凳汪\n");

if( getch() == 'q' )

exit(0);

}

getch();

}

int IsLeapYear( int year )

{

if ((year %4 == 0) && (year % 100 != 0) ||

return 1;

else

return 0;

}

跪求农历编写规则或者农历公历转换公式!

#include <time.h>

#include <stdio.h>

#include <string.h>

unsigned int LunarCalendarDay;

unsigned int LunarCalendarTable[199] =

{

0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/*1901-1910*/

0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x,/*1911-1920*/

0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x,0x2497B7,0x04974A,0x664B3E,/*1921-1930*/

0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48,/*1931-1940*/

0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51,/*1941-1950*/

0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x6AD53C,/*1951-1960*/

0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x,0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46,/*1961-1970*/

0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50,/*1971-1980*/

0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0x,0x5497BB,/*1981-1990*/

0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645,/*1991-2000*/

0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E,/*2001-2023*/

0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC,0x052B50,0x0A9345,0x474AB9,/*2023-2023*/

0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43,/*2023-2030*/

0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C,/*2031-2040*/

0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA,0x06D24E,0x0ADA42,0x355B37,/*2041-2050*/

0x09374B,0x8497C1,0x,0x064B48,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42,/*2051-2060*/

0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B,/*2061-2070*/

0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6,/*2071-2080*/

0x,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743,0x,0x0D264A,0x8E933E,/*2081-2090*/

0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 /*2091-2099*/

};

int MonthAdd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};

int LunarCalendar(int year,int month,int day)

{

int Spring_NY,Sun_NY,StaticDayCount;

int index,flag;

//Spring_NY 记录春节离当年元旦的天数。

//Sun_NY 记录阳历日离当年元旦的天数。

if ( ((LunarCalendarTable[year-1901] & 0x0060) >> 5) == 1)

Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1;

else

Spring_NY = (LunarCalendarTable[year-1901] & 0x001F) - 1 + 31;

Sun_NY = MonthAdd[month-1] + day - 1;

if ( (!(year % 4)) && (month > 2))

Sun_NY++;

//StaticDayCount记录大小月的天数 29 或30

//index 记录从哪个月开始来计算。

//flag 是用来对闰月的特殊处理。

//判断阳历日在春节前还是春节后

if (Sun_NY >= Spring_NY)//阳历日在春节后(含春节那天)

{

Sun_NY -= Spring_NY;

month = 1;

index = 1;

flag = 0;

if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)

StaticDayCount = 29;

else

StaticDayCount = 30;

while (Sun_NY >= StaticDayCount)

{

Sun_NY -= StaticDayCount;

index++;

if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) )

{

flag = ~flag;

if (flag == 0)

month++;

}

else

month++;

if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)

StaticDayCount=29;

else

StaticDayCount=30;

}

day = Sun_NY + 1;

}

else //阳历日在春节前

{

Spring_NY -= Sun_NY;

year--;

month = 12;

if ( ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20) == 0)

index = 12;

else

index = 13;

flag = 0;

if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)

StaticDayCount = 29;

else

StaticDayCount = 30;

while (Spring_NY > StaticDayCount)

{

Spring_NY -= StaticDayCount;

index--;

if (flag == 0)

month--;

if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))

flag = ~flag;

if ( ( LunarCalendarTable[year - 1901] & (0x80000 >> (index-1)) ) ==0)

StaticDayCount = 29;

else

StaticDayCount = 30;

}

day = StaticDayCount - Spring_NY + 1;

}

LunarCalendarDay |= day;

LunarCalendarDay |= (month << 6);

if (month == ((LunarCalendarTable[year - 1901] & 0xF00000) >> 20))

return 1;

else

return 0;

}

main()

{

"初六","初七","初八","初九","初十",

"十一","十二","十三","十四","十五",

"十六","十七","十八","十九","二十",

"廿一","廿二","廿三","廿四","廿五",

"廿六","廿七","廿八","廿九","三十"

};

struct tm * Local;

long t;

int year,month,day;

#if 0

t = time(NULL);

Local = localtime(&t);

year = Local->tm_year + 1900;

month = Local->tm_mon + 1;

day = Local-> tm_mday;

#else

year = 2023;

month = 2;

day = 10;

printf("请依次输入公历的年月日(例如2023年1月2日,输入:2023-1-2)");

scanf("%d-%d-%d", &year, &month, &day);

#endif

printf("%d年%d月%d日\t",year,month,day);

if (LunarCalendar(year,month,day))

{

strcat(str,"闰");

strcat(str,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);

}

else

strcat(str,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);

strcat(str,"月");

strcat(str,ChDay[LunarCalendarDay & 0x3F]);

puts(str);

}

以上内容是小编精心整理的关于公历转农历算法详解 公历转农历算法c语言的精彩内容,好的文章需要你的分享,喜欢公历转农历算法详解 公历转农历算法c语言这篇精彩文章的,请您经常光顾吧!

上一篇:农历9月12日是什么星座 1988年农历9月12日是什么星座

下一篇:更多运程

本文标题:公历转农历算法详解 公历转农历算法c语言

本文链接:http://m.shengxiao88.com/article/164741.html

使劲推荐

公历转农历算法详解 公历转农历算法c语言
公历转农历算法详解 公历转农历算法c语言

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于公历转农历算法详解 公历转农...

农历9月12日是什么星座 1988年农历9月12日是什么星座
农历9月12日是什么星座 1988年农历9月12日是什么星座

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历9月12日是什么星座 1988年...

6月18号农历多少日 6月18号农历多少号出生
6月18号农历多少日 6月18号农历多少号出生

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于6月18号农历多少日 6月18号农...

农历数九从哪天开始 农历数九口诀
农历数九从哪天开始 农历数九口诀

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历数九从哪天开始 农历数九...

农历5月属鸡人的命运 农历5月属鸡的命运怎么样
农历5月属鸡人的命运 农历5月属鸡的命运怎么样

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历5月属鸡人的命运 农历5月...

发表评论

相关推荐

生肖是按公历还是农历算 2024年一月属龙还是兔
生肖是按公历还是农历算 2024年一月属龙还是兔

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于生肖是按公历还是农历算 2024...

春节在农历的什么时候 春节在农历几日几月结束
春节在农历的什么时候 春节在农历几日几月结束

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于春节在农历的什么时候 春节在...

农历十一月是什么星座的人 农历十一月的蛇是什么命
农历十一月是什么星座的人 农历十一月的蛇是什么命

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历十一月是什么星座的人 农...

农历破土是什么意思 农历破土吉日
农历破土是什么意思 农历破土吉日

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历破土是什么意思 农历破土...

农历和阴历差几天 农历和阴历差几天怎么算
农历和阴历差几天 农历和阴历差几天怎么算

一篇好的文章需要好好的打磨,你现在浏览的文章是一篇关于农历和阴历差几天 农历和阴历...

精选运程标签