Les trois types principaux de calendriers
- Calendrier solaire : basé sur la période de révolution de la Terre autour du Soleil. Le nombre de mois par an et de jours par mois est défini par convention. Il est également appelé calendrier grégorien. > Le calendrier solaire (grégorien) est fondé sur le cycle solaire. La durée de ce cycle étant fixe, chaque mois a un nombre de jours prédéterminé.
- Calendrier lunaire : basé sur la période de révolution de la Lune autour de la Terre pour déterminer la durée d'un mois. Seul le nombre de mois dans une année peut être fixé par convention. (Il a évolué vers un calendrier lunisolaire.)> Le calendrier lunaire traditionnel chinois est l'un des anciens systèmes. Après la Révolution de 1911, le calendrier solaire occidental (grégorien) a été adopté. Le système actuel généralement appelé « calendrier lunaire » (Nónglì) est en réalité un calendrier lunisolaire.
- Calendrier lunisolaire : il utilise la période moyenne de la Lune autour de la Terre comme base pour un mois, mais incorpore un mois intercalaire afin que la durée moyenne d'une année corresponde à la période orbitale de la Terre autour du Soleil. Il est ausi appelé calendrier chinois traditionnel. > Ce calendrier suit les phases de la Lune. La période synodique moyenne est d'environ 29,5 jours, ce qui donne des mois de 29 ou 30 jours. Il distingue mois longs (30 jours) et mois courts (29 jours) pour maintenir la synchronisation avec les saisons astronomiques.
Différence entre année bissextile et mois intercalaire
- L'année bissextile est une notion du calendrier grégorien. La durée de la révolution terrestre (année tropique) est d'environ 365 jours, 5 heures, 48 minutes et 46 secondes. Une année commune de 365 jours est plus courte d'environ 0,2422 jour. Tous les quatre ans, ce décalage accumulé donne environ un jour supplémentaire, qui est ajouté au mois de février, faisant passer l'année à 366 jours. Ce mécanisme compense l'écart entre l'année civile et l'année tropique. > La règle est fixe : sur 400 ans, il y a 97 années bissextiles. Une année est bissextile si elle est divisible par 4, à l'exception des années séculaires non divisibles par 400. Le mois de février compte alors 29 jours au lieu de 28.
- Le mois intercalaire est une notion du calendrier lunaire chinois. Comme la période de révolution de la Lune est légèrement plus courte que celle du Soleil, une année lunaire est plus courte d'environ 11 jours qu'une année solaire. Pour corriger ce déséquilibre, un mois supplémentaire (intercalaire) est inséré certaines années, portant le total des mois à 13. > Un mois intercalaire apparaît environ tous les 3 ans. Une année contenant un mois intercalaire dure généralement 384 jours.
Exemples d'années bissextiles et de mois intercalaires récents
| Année | Signe astrologique | Bissextile (Grégorien) | Jours total (Grégorien) | Mois intercalaire (Lunaire) | Jours du mois intercalaire | Jours total (Lunaire) |
|---|---|---|---|---|---|---|
| 1990 | Cheval | 365 | intercalaire 5 | 29 | 384 | |
| 1991 | Brebis | 365 | 354 | |||
| 1992 | Singe | Oui | 366 | 354 | ||
| 1993 | Coq | 365 | intercalaire 3 | 29 | 383 | |
| 1994 | Chien | 365 | 355 | |||
| 1995 | Cochon | 365 | intercalaire 8 | 29 | 384 | |
| 1996 | Rat | Oui | 366 | 354 | ||
| 1997 | Buffle | 365 | 355 | |||
| 1998 | Tigre | 365 | intercalaire 5 | 29 | 384 | |
| 1999 | Lapin | 365 | 354 | |||
| 2000 | Dragon | Oui | 366 | 354 | ||
| 2001 | Serpent | 365 | intercalaire 4 | 29 | 384 | |
| 2002 | Cheval | 365 | 354 | |||
| 2003 | Brebis | 365 | 355 | |||
| 2004 | Singe | Oui | 366 | intecralaire 2 | 29 | 384 |
| 2005 | Coq | 365 | 354 | |||
| 2006 | Chien | 365 | intercalaire 7 | 29 | 385 | |
| 2007 | Cochon | 365 | 354 | |||
| 2008 | Rat | Oui | 366 | 354 | ||
| 2009 | Buffle | 365 | intercalaire 5 | 29 | 384 | |
| 2010 | Tigre | 365 | 354 | |||
| 2011 | Lapin | 365 | 354 | |||
| 2012 | Dragon | Oui | 366 | intercalaire 4 | 29 | 384 |
| 2013 | Serpent | 365 | 355 | |||
| 2014 | Cheval | 365 | intercalaire 9 | 29 | 384 | |
| 2015 | Brebis | 365 | 354 | |||
| 2016 | Singe | Oui | 366 | 355 | ||
| 2017 | Coq | 365 | intercalaire 6 | 30 | 384 | |
| 2018 | Chien | 365 | 354 | |||
| 2019 | Cochon | 365 | 354 | |||
| 2020 | Rat | Oui | 366 | intercalaire 4 | 29 | 384 |
| 2021 | Buffle | 365 | 354 | |||
| 2022 | Tigre | 365 | 355 | |||
| 2023 | Lapin | 365 | intercalaire 2 | 29 | 384 | |
| 2024 | Dragon | Oui | 366 | 354 | ||
| 2025 | Serpent | 365 | intercalaire 6 | 29 | 384 | |
| 2026 | Cheval | 365 | 354 | |||
| 2027 | Brebis | 365 | 354 | |||
| 2028 | Singe | Oui | 366 | intercalaire 5 | 29 | 384 |
Implémentation en Java pour calculer les années bissextiles et les mois intercalaires
L'exemple suivant utilise la bibliothèque standard Java ainsi que la bibliothèque Hutool pour des opérations courantes sur les dates et le calendrier chinois.
Ajout de la dépendance Maven :
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
Extrait de code Java :
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.chinese.LunarInfo;
public class CalendarAnalyzer {
private static final String[] CHINESE_MONTH_NAMES = {
"premier", "deuxième", "troisième", "quatrième", "cinquième", "sixième",
"septième", "huitième", "neuvième", "dixième", "onzième", "douzième"
};
public static void main(String[] arguments) {
int startYear = 1990;
int endYear = 2029;
for (int currentYear = startYear; currentYear < endYear; currentYear++) {
// Signe zodiacal
String zodiacSign = DateUtil.getChineseZodiac(currentYear);
// Année bissextile grégorienne ?
boolean isBissextile = DateUtil.isLeapYear(currentYear);
String bissextileLabel = isBissextile ? "Oui" : "Non";
int gregorianDays = DateUtil.lengthOfYear(currentYear);
// Mois intercalaire lunaire
int intercalaryMonth = LunarInfo.leapMonth(currentYear);
String intercalaryMonthName = "";
int intercalaryMonthDays = 0;
if (intercalaryMonth > 0) {
intercalaryMonthName = "intercalaire " + CHINESE_MONTH_NAMES[intercalaryMonth - 1];
intercalaryMonthDays = LunarInfo.leapDays(currentYear);
}
int lunarYearDays = LunarInfo.yearDays(currentYear);
// Affichage formaté
System.out.printf("| %d | %s | %s | %d | %s | %d | %d |%n",
currentYear, zodiacSign, bissextileLabel, gregorianDays,
intercalaryMonthName, intercalaryMonthDays, lunarYearDays);
}
}
}