Le Tutoriel de Java HijrahDate
1. HijrahDate
La classe HijrahDate représente les dates dans le système de calendrier Hijrah, communément appelé le calendrier islamique ou arabe, lequel est un système basé sur le calendrier lunaire, composé de 12 mois avec 354 ou 355 jours. Il est utilisé pour identifier les jours fériés islamiques, tels que la période de jeûne annuel ou l'événement Hijrah.
- JapaneseDate
- MinguoDate
- ThaiBuddhistDate
- LocalDate
- LocalDate
- Temporal
- TemporalAdjuster
- TemporalAccessor
- ChronoLocalDate
Le calendrier islamique utilise l'ère Hijrah (Hijrah era) qui correspond à l'année 622 dans le calendrier Gregorian (également appelé ISO). Cette année-là, Muhammad et ses adeptes ont immigré de Mecca (la Meque) jusqu'à Yathrib (l'actuel Medina) et créé la première communauté musulmane, cet événement a été décrété la Hijrah. En Occident, cette ère est souvent abréviée AH (Anno Hegirae en latin). Dans les pays musulmans, parfois, elle est abréviée H. En anglais, la période avant l'ère Hijrah est abréviée BH (Before Hijrah).
Le 1er janvier de l'année 1 dans le calandrier Hijrah correspond au 16 juillet 622. Le site web ci-dessous fournit un outil en ligne vous permettant de convenir les dates dans le calendrier Hijrah vers le calendrier Gregorian et vice versa:
Gregorian (ISO) | Hijrah |
622-07-16 | 1-01-01 |
2000-01-01 | 1420-09-24 |
Year
Une année dans le calendrier islamique dispose d'environ 354 ou 355 jours, soit 11 jours de moins par rapport au calendrier Gregorian.
La formule approximative utilisée pour convertir le calandrier Hijrah (AH) vers le calendrier Gregorian (CE) et vice versa:
AH = (CE − 622) × 33 ÷ 32
CE = AH + 622 − (AH ÷ 32)
Month
Le calendrier islamique dispose de 12 mois avec 29 ou 30 jours. Si la Lune croissante est visible juste après le coucher du soleil le soir du 29, le jour suivant est le premier jour du nouveau mois. Si aucune observation n'est faite, le 30e jour est ajouté au mois en cours, lequel est ensuite suivi du premier jour du mois suivant.
La version traditionnelle du calendrier islamique exige d'une personne ou d'une commission autorisée qu'elle effectue une observation de la Lune croissante afin de déterminer la longueur de chaque mois.
Cette dépendance des observations astronomiques provoque des difficultés dans la détermination de la longueur des mois islamiques. Les nuages et les autres conditions météorologiques défavorables peuvent couvrir la Lune croissante. Lorsque cela se survient, le mois peut s'allonger d'un jour et retarder le début du nouveau mois et ses événements associés. C'est la raison pour laquelle les jours fériés des Musulmans peuvent varier à court terme.
Certains pays et communautés musulmanes utilisent actuellement des versions modifiées du calendrier traditionnel qui sont conçues pour faciliter la prévision des mois et des observations islamiques du calendrier islamique
Un nouveau mois peut également commencer à des jours différents dans différents pays. Étant donné que l'heure du coucher de la lune d'un endroit dépend de sa longitude, un nouveau mois et des rituels religieux importants comme le jeûne du Ramadan peuvent commencer un jour plus tôt dans les pays musulmans d'Afrique de l'Ouest qu'en Indonésie ou en Malaisie, par exemple.
Les noms des mois dans le calendrier Hijrah:
Months | ISO Months | Hijrah Months |
1 | January | Muharram |
2 | February | Safar |
3 | March | Rabi Al-Awwal |
4 | April | Rabi Al-Thani |
5 | May | Jumada Al-Awwal |
6 | June | Jumada Al-Thani |
7 | July | Rajab |
8 | August | Sha`ban |
9 | September | Ramadan |
10 | October | Shawwal |
11 | November | Dhul-Qa`dah |
12 | December | Dhul-Hijjah |
Les noms des jours de la semaine :
English Day-Of-Week | Hijrah Day-Of-Week | |
1 | Sunday | Al-Ahad |
2 | Monday | Al-Ithnayn |
3 | Tuesday | Al-Thulathaa |
4 | Wednesday | Al-Arbo’aa |
5 | Thursday | Al-Khamees |
6 | Friday | Al-Jum’ah |
7 | Saturday | Al-Sabt |
Voir plus d'explication des noms de chaque mois et jour de la semaine dans le système de calendrier Hijrah :
2. Basic Example
À la base, le calendrier islamique dispose de nombreuses variantes, la raison étant que de nombreux pays et de nombreuses sectes l'utilisent. La classe HijrahDate en supporte plusieurs, l'important est que Java vous permette de la configurer pour ajouter de nouvelles variantes.
La variante par défaut prise en charge dans Java est "islamic-umalqura" - le calendrier islamique saoudien Umm Al-Qura. (Voir plus la classe HijrahChronology pour plus de détails.)
- Le Tutoriel de Java HijrahChronology
Pour mieux comprendre, on va analyser l'exemple ci-dessous (en utilisant la variante du calendrier islamique par défaut) :
HijrahDate_default_variant_ex1.java
LocalDate localDate = LocalDate.of(2000, 1, 1);
HijrahDate hijrahDate = HijrahDate.from(localDate);
System.out.printf("localDate: %s%n", localDate); // 2000-01-01
System.out.printf("hijrahDate: %s%n%n", hijrahDate); // Hijrah-umalqura AH 1420-09-24
HijrahEra era = hijrahDate.getEra(); // HijrahEra.AH
System.out.printf(" > era.name(): %s%n%n", era.name()); // AH
HijrahChronology chronology = hijrahDate.getChronology();
System.out.printf(" > chronology.getId(): %s%n", chronology.getId()); // Hijrah-umalqura
System.out.printf(" > chronology.getCalendarType(): %s", chronology.getCalendarType()); // islamic-umalqura
Output:
localDate: 2000-01-01
hijrahDate: Hijrah-umalqura AH 1420-09-24
> era.name(): AH
> chronology.getId(): Hijrah-umalqura
> chronology.getCalendarType(): islamic-umalqura
Le texte représentant une HijrahDate se compose de 3 parties :
Chronology ID:
(Identifiant chronologique) : Permettre de spécifier quelle variante utiliser. Les systèmes de calendrier Gregorian (ISO) et Japanese ne disposent d'aucune variation, donc cette information n'apparaît pas.
Era Name:
(Nom de l'ère) : Une seule époque est prise en charge, à savoir HijrahEra.AH.
Date:
L'information de date.
3. Supported Range Example
Bien qu'en pratique, le système de calendrier Hijrah ne limite pas la plage de dates, mais Java ne la prend en charge que dans une faible dimension, plus précisément :
(**) Test with Java 11. | ||
Hijrah Date | ISO Date | |
From | Hijrah-umalqura AH 1300-01-01 | 1882-11-12 |
To | Hijrah-umalqura AH 1600-12-30 | 2174-11-25 |
L'exemple ci-dessous permet de trouver la date la plus petite et la plus grande dans le système de calendrier Hijrah pris en charge par Java.
HijrahDate_date_range_ex1.java
package org.o7planning.hijrahdate.ex;
import java.time.LocalDate;
import java.time.chrono.Chronology;
import java.time.chrono.HijrahChronology;
import java.time.chrono.HijrahDate;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.ValueRange;
public class HijrahDate_date_range_ex1 {
public static void main(String[] args) {
Chronology chronology = HijrahChronology.INSTANCE;
ValueRange range = chronology.range(ChronoField.YEAR);
int minYear = (int) range.getMinimum();
int maxYear = (int) range.getMaximum();
System.out.println("minYear: " + minYear);
System.out.println("maxYear: " + maxYear);
// ----- Find the first supported date --------
// A Hijrah Month have 29 or 30 days.
HijrahDate hijrahDate = null;
try {
hijrahDate = HijrahDate.of(minYear, 12, 30);
} catch (Exception e) {
hijrahDate = HijrahDate.of(minYear, 12, 29);
}
HijrahDate firstDate = hijrahDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println("First date: " + firstDate + " --> " + LocalDate.from(firstDate));
// ----- Find the last supported date --------
hijrahDate = HijrahDate.of(maxYear, 1, 1);
hijrahDate.range(ChronoField.DAY_OF_YEAR);
HijrahDate lastDate = hijrahDate.with(TemporalAdjusters.lastDayOfYear());
System.out.println("Last date: " + lastDate + " --> " + LocalDate.from(lastDate));
}
}
Output:
minYear: 1300
maxYear: 1600
First date: Hijrah-umalqura AH 1300-01-01 --> 1882-11-12
Last date: Hijrah-umalqura AH 1600-12-30 --> 2174-11-25
4. Month Length Example
Exemple : Afficher la durée des mois de quelques années (variante par défaut : calendrier islamique saoudien Umm Al-Qura).
HijrahDate_monthLength_ex1.java
int[] hijrahYears = new int[] { 1441, 1442, 1443, 1444, 1445 };
HijrahDate hijrahDate = HijrahDate.of(hijrahYears[0], 1, 1);
System.out.println("Hijrah Year: " + hijrahYears[0]); // 1441
System.out.println("ISO Year: " + LocalDate.from(hijrahDate).getYear()); // 2019
System.out.println();
for (int month = 1; month <= 12; month++) {
for (int hijrahYear : hijrahYears) {
hijrahDate = HijrahDate.of(hijrahYear, month, 1);
System.out.printf("Year: %s Month: %s --> %d%n", hijrahYear, month, hijrahDate.lengthOfMonth());
}
}
Output:
Year | 1441 | 1442 | 1443 | 1444 | 1445 |
Month | |||||
1 | 30 | 29 | 30 | 29 | 29 |
2 | 29 | 30 | 29 | 30 | 30 |
3 | 30 | 29 | 30 | 29 | 30 |
4 | 29 | 30 | 29 | 30 | 30 |
5 | 30 | 29 | 30 | 30 | 29 |
6 | 30 | 30 | 29 | 29 | 30 |
7 | 29 | 29 | 30 | 29 | 29 |
8 | 30 | 30 | 29 | 30 | 29 |
9 | 30 | 30 | 30 | 29 | 30 |
10 | 29 | 29 | 29 | 30 | 29 |
11 | 30 | 30 | 30 | 29 | 29 |
12 | 29 | 29 | 30 | 30 | 30 |
Tutoriels Java Date Time
- Le Tutoriel de Java ZoneId
- Le Tutoriel de Java Temporal
- Le Tutoriel de Java Period
- Le Tutoriel de Java TemporalAdjusters
- Le Tutoriel de Java MinguoDate
- Le Tutoriel de Java TemporalAccessor
- Le Tutoriel de Java JapaneseEra
- Le Tutoriel de Java HijrahDate
- Le Tutoriel de Java Date, Time
- Qu'est-ce que l'heure d'été (DST)?
- Le Tutoriel de Java LocalDate
- Le Tutoriel de Java LocalTime
- Le Tutoriel de Java LocalDateTime
- Le Tutoriel de Java ZonedDateTime
- Le Tutoriel de Java JapaneseDate
- Le Tutoriel de Java Duration
- Le Tutoriel de Java TemporalQuery
- Le Tutoriel de Java TemporalAdjuster
- Le Tutoriel de Java ChronoUnit
- Le Tutoriel de Java TemporalQueries
Show More
- Tutoriels Java Web Service
- Tutoriels de programmation Java Servlet/JSP
- Tutoriels de JavaFX
- Tutoriels de programmation Java SWT
- Tutoriels Java Oracle ADF
- Java Basic
- Tutoriels de Java Collections Framework
- Tutoriels Java IO
- Tutoriels Struts2
- Tutoriels Spring Boot
- Tutoriels Spring Cloud
- Tutoriels Maven
- Tutoriels Gradle