首页 > 精彩资讯 > 日历查询农历查询 日历农历阳历表对照表

日历查询农历查询 日历农历阳历表对照表

投稿人:增缘分网 2023-08-21 11:15:01

在国内,有许多民间习俗、节日都与农历有关。对于想要了解农历的人来说,一个真实可信的日历农历阳历表对照表是必不可少的工具。接下来,我们就来深入了解一下日历农历阳历表对照表。

一、日历与农历的区别

日历和农历最大的不同在于计算方式不同。日历采用太阳日为基础,每年365天,一年中四季分明,特点是平稳稳定,对于固定的时刻和日期有很高的准确性,常见的阳历就是采用日历计算的。

而农历则是按照农时变化来计算的,历法建立在月球运动为基础上。一年中的月亮圆缺阴晴不定,因此农历每年的天数不同,并且不像日历一样有固定的大小月。农历的四季划分并不严密,但是对于一些民间习俗和节日的庆祝有着重要的意义。以为例,春节、中秋节、元宵节等都是农历节日。

二、阳历和农历的转换

日历查询农历查询 日历农历阳历表对照表

由于阳历与农历计算方式不同,因此两者之间要进行转换就需要掌握一些转换方法。

1.阳历转农历:

设阳历年、月、日为:Y、M、D

一、计算阳历年距离1900年的天数。

1901(年)——1950(年)=49(年)

365×49+12=18,979(天)

1950年1月1日————1900年1月1日=365+365+365+365+366

=1826(天)

18,979+1,826-1=20,804(天)

二、计算年码

(Y-1900)%12+1

三、计算闰年数

int k;

k=(Y-1900)/4;

k=k-(Y-1900)/100;

k=k+(Y-1900)/400;

if((Y%4==0&&Y%100!=0)||Y%400==0&&M>2) k++;

else k=k;

即:k=(闰年数),也有说法k=负闰数)

四、计算该日之前passedDays

passedDays=365*(Y-1900)+k+(int)(30.6*(M+1))+D-62;

1月和2月要当成上一年的13月和14月,得:

if(M<3) passedDays=passedDays+1;

五、计算该日对应的阴历日期

int total,k,rn,i;

total=passedDays; /*1900-1-31是阴历1900年正月初一*/

rn=1; /*阴历月天数还是初始为大月*/

for (i=1900;i<=2100 && total>0;i++)

{

k=chineseCalendarData[i-1900];/*农历每一年的天数,区分大小月*/

r=nDaysOfYear(type,i);/*阳历每个月的天数*/

total=total-(k+(r?29:30));/*累减每一年的天数*/

rn++;

}

if (total<0)

total+=k+(r?29:30);

rn--;

return(rn*100+passedDays+29);

2.农历转阳历:

农历转阳历需要用到以下字符串数组:

char *stZodiac[]={"344270255","345244256","345255227","346265225","345255246","346227245","344277241",

"347256200","345244247","346225260","345205255","346213253"};

char *stName[]={"","347224265","344275240","350262215","345246267","345231250","346205252",

"347220206","346224235","346227245","344277241","345265266","346231242"};

int aSpecialMonth[]={0,2,5,8,10,13};

其中"stZodiac[]"为十二生肖,"stName[]"为中文数字(一到十二),"aSpecialMonth[]"为十二个月中有闰月的月份。

附上农历转阳历代码:

void GetUpOffset(int &nTheDate)

int nOffset;

if (GetBit(nTheDate, 22) != 0)

nOffset = 0;

for (int i = 21; i >= 0; i--)

if (GetBit(nTheDate, i) != 0)

nOffset += aMonthAdd[i];

if (aLeapMonth[GetBit(nTheDate, 23) - 1] != 0 && GetBit(nTheDate, 22) != 0)

nOffset -= aMonthAdd[aLeapMonth[GetBit(nTheDate, 23) - 1] - 1];

nOffset += aMonthAdd[12];

else

for (int i = 20; i >= 0; i--)

if (aLeapMonth[GetBit(nTheDate, 21) - 1] != 0 && GetBit(nTheDate, 21) != 0)

nOffset -= aMonthAdd[aLeapMonth[GetBit(nTheDate, 21) - 1] - 1];

nTheDate = nOffset + GetBit(nTheDate, 9) + 29;

int CCalendar::Lunar2SolarIndex( long dwLunarData )

int Year, Month, Day;

int LeapMonth = GetLeapMonth(dwLunarData);

int DayCount = GetBitInt(dwLunarData, 17, 5);

int BitMonth = GetBitInt(dwLunarData, 12, 4);

int BitDay = GetBitInt(dwLunarData, 7, 5);

int IsLeap = false;

if (LeapMonth > 0)

if (BitMonth >= LeapMonth)

Month = BitMonth + 1;

Month = BitMonth;

if (Month == 12)

Month = 1;

if (Month <= LeapMonth)

Year = GetBitInt(dwLunarData, 9, 4);

if (Year <= BitMonth)

Year--;

IsLeap = (BitMonth == LeapMonth);

Day = DayAdd[Year - MIN_YEAR] + GetBitInt(dwLunarData, 0, 7) - 1;

auto solarAns = Lunar2Solar(Year, Month, Day, IsLeap);

return solarAns.nDayIndex;

三、结语

在日常生活中,阳历日历还是更加受到人们的喜爱和使用。但是,对于一些民间节日、重要活动的举办等,农历日历占据着不可替代的地位。因此,了解日历农历阳历表对照表的转换方法,对于我们更好地了解民俗文化,也有非常重要的帮助作用。

本文标签:

分享:

扫一扫在手机浏览本文