公历闰年和农历闰月的计算方法
世界上的历法共有三类
1、阳历,就是以地球绕太阳运转一圈的时间为一年,年的月数和月的日数可人为规定;又称为公历。
阳历是根据太阳的运转制定的,太阳的运转周期是固定的,因此阳历的每个月的天数也是固定的。
2、阴历,就是以月球绕地球运转一圈的时间为一个月,只有年的月数可以人为规定;(已改进为阴阳历)
阴历是中国传统历法之一,也被称为旧历、汉历、古历等,辛亥革命后改用西方太阳历(公历),而现代叫法的农历属于阴阳合历。
3、阴阳历,就是以月球平均绕地球转一圈的时间为一月,但通过设置闰月,使一年的平均天数又与地球平均绕太阳转一圈的时间相等,又称农历。(农历是以阴历为基础,融合阳历成分而形成的一种历法。)
农历是按照月亮的运转制定的,月亮的运转周期是29.5天左右,因此农历的一个月可能是29天或者30天。
此外,农历有大月和小月之分,大月有30天,小月有29天。这是为了调整历法和实际季节之间的差距,使得农历的年与年之间更加准确对应。
农历是我国传统历法,又有阴历、华历、夏历、汉历、中历等名称,但农历并不是阴历而是一种阴阳合历,取月相的变化周期即朔望月为月的长度,参考太阳回归年为年的长度,通过设置二十四节气以及闰月以使平均历年与回归年相适应。
闰月和闰年有什么区别?
1、闰年是公历的名词。由于地球绕日运行周期为365天5小时48分46秒,即一回归年。
公历的平年只有365日,比回归年短约0.2422日,每四年累积约一天,把这一天加于2月末,使当年时间长度变为366日,这一年就为闰年。闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。
闰年是固定的,公历规定每400年97闰,也就是能被4整除的年就是闰年,每四年一次,闰年比平年多一天,也就是366天。
这一年的2月是29天;其余年份的2月是28天。除了2月以外,其它月份的天数没有平年和闰年的区别。
2、闰月是中国的农历的名词。由于月亮的周期比太阳的周期略短,所以农历的一年比阳历的一年要短约11天左右。
为了解决这个问题,农历引入了闰月的概念。闰月是在某些年份的某个月份中插入的一个额外月份,使得该年的总月数变成13个。
每隔3年左右就有一个闰月,有闰月的每年大概是384天。
列举近年的闰年闰月时间
年份 | 生肖 | 公历闰年 | 总天数 | 农历闰月 | 闰月天数 | 总天数 |
---|---|---|---|---|---|---|
1990 | 马 | 365 | 闰五月 | 29 | 384 | |
1991 | 羊 | 365 | 354 | |||
1992 | 猴 | 闰年 | 366 | 354 | ||
1993 | 鸡 | 365 | 闰三月 | 29 | 383 | |
1994 | 狗 | 365 | 355 | |||
1995 | 猪 | 365 | 闰八月 | 29 | 384 | |
1996 | 鼠 | 闰年 | 366 | 354 | ||
1997 | 牛 | 365 | 355 | |||
1998 | 虎 | 365 | 闰五月 | 29 | 384 | |
1999 | 兔 | 365 | 354 | |||
2000 | 龙 | 闰年 | 366 | 354 | ||
2001 | 蛇 | 365 | 闰四月 | 29 | 384 | |
2002 | 马 | 365 | 354 | |||
2003 | 羊 | 365 | 355 | |||
2004 | 猴 | 闰年 | 366 | 闰二月 | 29 | 384 |
2005 | 鸡 | 365 | 354 | |||
2006 | 狗 | 365 | 闰七月 | 29 | 385 | |
2007 | 猪 | 365 | 354 | |||
2008 | 鼠 | 闰年 | 366 | 354 | ||
2009 | 牛 | 365 | 闰五月 | 29 | 384 | |
2010 | 虎 | 365 | 354 | |||
2011 | 兔 | 365 | 354 | |||
2012 | 龙 | 闰年 | 366 | 闰四月 | 29 | 384 |
2013 | 蛇 | 365 | 355 | |||
2014 | 马 | 365 | 闰九月 | 29 | 384 | |
2015 | 羊 | 365 | 354 | |||
2016 | 猴 | 闰年 | 366 | 355 | ||
2017 | 鸡 | 365 | 闰六月 | 30 | 384 | |
2018 | 狗 | 365 | 354 | |||
2019 | 猪 | 365 | 354 | |||
2020 | 鼠 | 闰年 | 366 | 闰四月 | 29 | 384 |
2021 | 牛 | 365 | 354 | |||
2022 | 虎 | 365 | 355 | |||
2023 | 兔 | 365 | 闰二月 | 29 | 384 | |
2024 | 龙 | 闰年 | 366 | 354 | ||
2025 | 蛇 | 365 | 闰六月 | 29 | 384 | |
2026 | 马 | 365 | 354 | |||
2027 | 羊 | 365 | 354 | |||
2028 | 猴 | 闰年 | 366 | 闰五月 | 29 | 384 |
Java闰年闰月的计算方法
引入依赖:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
Java代码:
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.chinese.LunarInfo;
public class ChineseMonth {
private static final String[] MONTH_NAME = {"正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "腊"};
public static void main(String[] args) {
for (int year = 1990; year < 2029; year++) {
// 生肖
String zodiac = DateUtil.getChineseZodiac(year);
// 公历闰年
String leapYear = DateUtil.isLeapYear(year) ? "闰年" : "";
String yearDays = DateUtil.lengthOfYear(year) + "";
// 农历闰月
int month = LunarInfo.leapMonth(year);
String chineseMonthName = month > 0 ? "闰" + MONTH_NAME[month - 1] + "月" : "";
String chineseMonthDays = month > 0 ? LunarInfo.leapDays(year) + "" : "";
String chineseyearDays = LunarInfo.yearDays(year) + "";
System.out.println("|" + year + "|" + zodiac + "|" + leapYear + "|" + yearDays + "|" + chineseMonthName + "|" + chineseMonthDays + "|" + chineseyearDays);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步