阳历阴历换算公式(阳历阴历换算公式)
导语:阳历阴历换算公式阳历转阴历公式将阳历年月日转换为闰年正月初一到阳历年月日之间的天数,再根据阴历年份的闰月和该年每个月的天数,计算出对应的阴历日期。具体步骤:计算阳历年月日与1900年1月31日相隔的天数,记为sum_days。计算闰年的数量...
阳历阴历换算公式
阳历转阴历公式
将阳历年月日转换为闰年正月初一到阳历年月日之间的天数,再根据阴历年份的闰月和该年每个月的天数,计算出对应的阴历日期。具体步骤:
- 计算阳历年月日与1900年1月31日相隔的天数,记为sum_days。
- 计算闰年的数量,记为leap_year_num。1900-1-31到该年春节的天数 >= 0,即为闰年,共有 leap_year_num 个闰年。
- 将阳历日期与阴历1900年正月初一的天数差(即sum_days-29-leap_year_num)相除并向下取整,记为y。y表示该年是阴历的第y年。
- 计算阴历年份的春节所在阳历年份的天数,记为spring_festival_days。春节在阴历1月1日,所以该天数为1900-1-31到该年春节的天数。
- 如果y小于1921(即1921年前),则该年的闰月为阴历的第四月,每个月的天数分别为大月30天、小月29天,闰月为小月。如果 y 大于或等于1921但小于2051,闰月为阴历的第2月,每个月的天数分别为大月30天、小月29天,闰月为小月。如果 y 大于或等于2051,则闰月为阴历的第5月,每个月的天数分别为大月30天、小月29天,闰月为小月。
- 计算出当年阴历的每个月的天数和闰月的天数(如果当年有闰月),记为month_days。month_days可以用一个16进制数表示,其中二进制位1表示大月(30天),0表示小月(29天)。如:0x04bd表示阴历的1月、2月、3月是大月,4月是小月,5月到12月是大月,即(31, 29, 30, 29, 30, 30, 29, 29, 30, 29, 30, 30)。
- 计算阴历日。用sum_days-spring_festival_days来表示阳历春节到该日期的天数差,再在阴历每个月的天数之间前进,直到天数差小于该月的天数,即得到阴历日。
阴历转阳历公式
将阴历年月日转换为阴历正月初一到该日期的天数,再根据阳历1900年1月31日和计算出的天数得到阳历日期。具体步骤:
- 计算阴历年份前一年的阳历年份,记为last_year。以阴历日期为基准,如果该日期在阳历年份的春节前,则该日期属于上一年,否则属于当前年。
- 计算last_year到阴历年份的春节所在阳历年份的天数差,记为sum_days。春节在阴历1月1日,所以该天数为该年春节到阳历1900年1月31日的天数。
- 如果该年有闰月,计算出闰月的天数,记为leap_month_days。
- 将阴历月份转换为天数,记为month_days。month_days可以用一个16进制数表示,其中二进制位1表示大月(30天),0表示小月(29天)。如:0x04bd表示阴历的1月、2月、3月是大月,4月是小月,5月到12月是大月,即(31, 29, 30, 29, 30, 30, 29, 29, 30, 29, 30, 30)。
- 计算阳历日期的天数,即1900年1月31日到该日期的天数,记为solar_days。
- 判断该年有无闰月。如果没有,则直接参照month_days计算阴历日期。如果有闰月,在计算过程中需要判断。
- 用month_days中的天数按顺序减去solar_days,得到阳历日期距离阴历正月初一的天数差,记为diff_days。
- 如果该年有闰月,那么diff_days比较时需要加上闰月的天数,并判断该日期是否在闰月。如果在,则需要执行与上面类似的计算过程,否则跳过闰月(为了计算简便,可以将闰月视为该年最后一个月)。
免责申明:以上内容属作者个人观点,版权归原作者所有,如有侵权或内容不符,请联系我们处理,谢谢合作!
评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。