devstory

Le Tutoriel de Java HijrahDate

View more Tutorials:

Suivez-nous sur notre fanpage pour recevoir des notifications chaque fois qu'il y a de nouveaux articles. Facebook

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.
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.)
  • TODO Link?
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

View more Tutorials:

Peut-être que vous êtes intéressé

Voici des leçons en ligne à part du site web o7planning que nous recommandons. La liste comprend des leçons en ligne et celles en promo.