Comment convertir la date grégorienne en date hégirienne [Résolu]

dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 22 sept. 2014 à 15:19 - Dernière réponse :  sabiri
- 24 déc. 2014 à 12:15
Bonjour,
Voila j'ai un label qui affiche la date du jour sous format dddd dd mmmm yyyy (date grégorienne)
J'ai voulu afficher la conversion de cette date en date hégirienne.
Peut-on traduire la date hégirienne de l'arabe en Français , autrement dit
Si j'ai par exemple la date 01/01/1435 (jour/mois/année) après traduction j'aurai 01 Muharram 1435
Donc :
mois 01 = Muharram
mois 02 = Safar
mois 03 = Rabi' Al Awwal
mois 04 = Rabi' Al AKIR
mois0 5 = Joummada al Awwal
mois 06 = Joummada Al AKIR
mois 07 =Rajab
mois 08 =Cha'bane
mois 09 =Ramadan
mois 10 =Scawal
mois 11 =Dhoul Qi'dah
mois 12 =DhoulHidjah
Y `a-t-il une solution ou fonction vb pour ca
Merci d'avance .




--
Afficher la suite 

20 réponses

Répondre au sujet
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 22 sept. 2014 à 15:47
Commenter la réponse de cs_ShayW
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 23 sept. 2014 à 19:26
0
Utile
Je te remerci pour le lien
Mon souci ce que je n arrive pas
A afficher les mois en français.
Je bloque au niveau du code.
--
Commenter la réponse de dindinfb
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 24 sept. 2014 à 12:55
0
Utile
Bonjour dindinfb,
Pouvez-vous montrer une tentative de code ?
Cordialement.
Commenter la réponse de Zermelo
0
Utile
1
Salut,

Comme te l'a signalé ShayW que je salue (ainsi que Zermelo), Tu dois te servir de la classe HijriCalendar :

Dim MaDate As New Date(2014, 9, 24, New Globalization.HijriCalendar)
MessageBox.Show(MaDate.ToLongDateString)

Qui donne mardi 23 avril 2576 pour aujourd'hui donc.
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 24 sept. 2014 à 13:40
Banana32, je suis ravi de te retrouver sur ce site.
Avec mes amitiés.
Commenter la réponse de banana32
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 24 sept. 2014 à 15:10
0
Utile
1
Bonjour à tous
Voila le code que j'utilise pour affiche la date hégirienne en arabe dans un label (le code fonctionne parfaitement).
Imports System.Globalization
Imports System. Threading

Dim HCal As New System.Globalization.HijriCalendar
Dim dt As DateTime = DateTime.Now
Dim ci As New System.Globalization.CultureInfo("ar-SA")
Label5.Text = dt.ToString("dddd dd MMMM yyyy", ci)
Un autre code qui affiche la conversion de la date grégorienne en arabe, c'est-à-dire la traduction ( le code fonctionne parfaitement):
Dim HCal1 As New System.Globalization.HijriCalendar
Dim dt1 As DateTime = DateTime.Now
Dim ci1 As New System.Globalization.CultureInfo("ar-tn")
Label4.Text = dt.ToString("dddd dd MMMM yyyy", ci1)

Si j'ai bien compris le code CultureInfo("ar-tn") converti la date grégorienne en date utilisé en Tunisie sachant que le code CultureInfo("ar-SA") converti la date grégorienne en date utilisé en Arabie Saoudite .
Il me reste ce bout de code qui convertie cette meme date en Français.
J'ai essayé CultureInfo("en-SA") et CultureInfo("fr-tn")
Il m'affiche une erreur.

Pour info la date hégirienne aujourd'hui est le mercredi 29/11/1435.
(Année 0001 de l'hégire équivaut à 622 après JC, il faut enlever 11 j par an X 1435 = (622 - 43) + 1435 = 2014

Année Grégorienne : 365 jours (année solaire)
Année hégirienne : 354 jour (année lunaire)
Je pense qu'on pourra le faire avec
Select case
Mais je ne la maitrise pas.


--
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 24 sept. 2014 à 15:45
Tapez donc Select Case dans Google !
Commenter la réponse de dindinfb
Commenter la réponse de banana32
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 24 sept. 2014 à 22:12
0
Utile
1
je te remercie banana32 pour tes code que j'ai testé bien sur.
le premier donne mardi 23 avril 2576
le 2 ème me donne" le mois en français :avril".
ce n'est pas du tout le nom que je cherche ,
le non exacte est " Dhoul Qi'dah".
D'ailleurs le mois en cours est le 11 ème mois et non pas le 4 ème et l'année est 1435 et non pas 2576.

--
Oui tu as raison, c'est pour cela que j'avais tenté vainement d'effacer ma bêtise ;)
Commenter la réponse de dindinfb
0
Utile
Bon allez, pour me faire pardonner, j'ai transformé le code javascript du site http://www.aly-abbara.com/utilitaires/calendrier/calendrier_hijir.html en une fonction .NET et cette fois, on arrive au résultat attendu ;)

Imports System.Globalization

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MessageBox.Show(julienhijri(24, 9, 2014))
End Sub



Private Function JulienHijRi(ByVal DD As Integer, ByVal MM As Integer, ByVal YY As Integer) As String
Dim GGG As Double = 1
If (YY < 1582) Then GGG = 0
If (YY <= 1582 And MM < 10) Then GGG = 0
If (YY <= 1582 And MM = 10 And DD < 5) Then GGG = 0
Dim JD As Double = -1 * Math.Floor(7 * (Math.Floor((MM + 9) / 12) + YY) / 4)
Dim S As Double = 1
If ((MM - 9) < 0) Then S = -1
Dim A As Double = Math.Abs(MM - 9)
Dim J1 As Double = Math.Floor(YY + S * Math.Floor(A / 7))
J1 = -1 * Math.Floor((Math.Floor(J1 / 100) + 1) * 3 / 4)
JD = JD + Math.Floor(275 * MM / 9) + DD + (GGG * J1)
JD = JD + 1721027 + 2 * GGG + 367 * YY - 0.5
Dim K1 As Double = (JD + 1.5)
Dim K2 As Double = (K1 / 7)
Dim K3 As Double = K2 - Math.Floor(K2)
Dim JS As Double = Math.Round(K3 * 7 + 0.000000000317)

Dim Z As Double = (JD + 0.5)
Dim AH As Double = Math.Floor((Z * 30 - 58442554) / 10631)
Dim R2 As Double = Z - Math.Floor((AH * 10631 + 58442583) / 30)
Dim M As Double = Math.Floor((R2 * 11 + 330) / 325)
Dim R1 As Double = R2 - Math.Floor((M * 325 - 320) / 11)
Dim J As Double = R1 + 1

Dim strM() As String = {"Mouharram", "Safar", "Rabi'ou Al-Awwal", "Rabi'ou Al-Thani", "Joumada Al-Awwal", "Joumada Al-Thani", "Rajab", "Ch'ban", "Ramadan", "Chawwal", "Dhou Al-Qi'da", "Dhou Al-Hijja"}
Dim strJ() As String = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"}

Return String.Format("{0} {1} {2} {3}", strJ(JS - 1), J, strM(M - 1), AH)

End Function

End Class
Commenter la réponse de banana32
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 25 sept. 2014 à 20:20
0
Utile
1
Alors là un tres grand merci à toi , franchement c'est vraiment ca que je cherche,juste comment faire pour modifier la fonction
MessageBox.Show(JulienHijRi(Label1.Text))
c'est à dire la fonction récuperer auto la date du label 1.
sinon c'est une merveille .
un trés grand merci encore .
--
De rien ;)
juste comment faire pour modifier la fonction
Tout dépend du format de la date inscrite dans ton label... que je ne peux deviner.
Commenter la réponse de dindinfb
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 25 sept. 2014 à 21:22
0
Utile
1
Format date dd mmmm yyyy

Merci
--
Tu ne peux pas isoler le jour, mois et année affichées dans ton label pour les passer à la fonction ?
Quel est le code servant à afficher cette date dans ce label ?
Commenter la réponse de dindinfb
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 25 sept. 2014 à 21:40
0
Utile
Le plus simple c est utiliser"today"
--
Commenter la réponse de dindinfb
0
Utile
Sinon, avec une modification de la fonction, tu peux utiliser DateTime.TryParse
Bien sur il faudra remplacer "mercredi 24 septembre 2014" par Label1.Text par exemple.

Public Class Form1

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim resultat As Date
If DateTime.TryParse("mercredi 24 septembre 2014", resultat) Then
MessageBox.Show(JulienHijRi(resultat))
End If
End Sub

Private Function JulienHijRi(ByVal Madate As Date) As String
Dim YY As Double = Madate.Year
Dim MM As Double = Madate.Month
Dim DD As Double = Madate.Day

Dim GGG As Double = 1
If (YY < 1582) Then GGG = 0
If (YY <= 1582 And MM < 10) Then GGG = 0
If (YY <= 1582 And MM = 10 And DD < 5) Then GGG = 0
Dim JD As Double = -1 * Math.Floor(7 * (Math.Floor((MM + 9) / 12) + YY) / 4)
Dim S As Double = 1
If ((MM - 9) < 0) Then S = -1
Dim A As Double = Math.Abs(MM - 9)
Dim J1 As Double = Math.Floor(YY + S * Math.Floor(A / 7))
J1 = -1 * Math.Floor((Math.Floor(J1 / 100) + 1) * 3 / 4)
JD = JD + Math.Floor(275 * MM / 9) + DD + (GGG * J1)
JD = JD + 1721027 + 2 * GGG + 367 * YY - 0.5
Dim K1 As Double = (JD + 1.5)
Dim K2 As Double = (K1 / 7)
Dim K3 As Double = K2 - Math.Floor(K2)
Dim JS As Double = Math.Round(K3 * 7 + 0.000000000317)

Dim Z As Double = (JD + 0.5)
Dim AH As Double = Math.Floor((Z * 30 - 58442554) / 10631)
Dim R2 As Double = Z - Math.Floor((AH * 10631 + 58442583) / 30)
Dim M As Double = Math.Floor((R2 * 11 + 330) / 325)
Dim R1 As Double = R2 - Math.Floor((M * 325 - 320) / 11)
Dim J As Double = R1 + 1

Dim strM() As String = {"Mouharram", "Safar", "Rabi'ou Al-Awwal", "Rabi'ou Al-Thani", "Joumada Al-Awwal", "Joumada Al-Thani", "Rajab", "Ch'ban", "Ramadan", "Chawwal", "Dhou Al-Qi'da", "Dhou Al-Hijja"}
Dim strJ() As String = {"Dimanche ", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"}

Return String.Format("{0} {1} {2} {3}", strJ(JS), J, strM(M - 1), AH)

End Function

End Class
Commenter la réponse de banana32
dindinfb 48 Messages postés mardi 24 mars 2009Date d'inscription 3 janvier 2015 Dernière intervention - 25 sept. 2014 à 22:20
0
Utile
2
Enfin la fuction marche bien, reste a te
Remercier encore une fois.

--
salam à tous
voici l'équivalent de ce code en powershell
Function JulienHijRi($DD, $MM, $YY)
{
[double]$GGG = 1
If ($YY -lt 1582) {$GGG = 0}
If (($YY -le 1582) -And ($MM -lt 10)) {$GGG = 0}
If ((($YY -le 1582) -And ($MM = 10) -And ($DD -lt 5))) { $GGG = 0}
[double]$JD = -1 * [System.Math]::Floor(7 * ([System.Math]::Floor(($MM + 9) / 12) + $YY) / 4)
[double]$S = 1
If (($MM - 9) -lt 0) {$S = -1}
[double]$A = [System.Math]::Abs($MM - 9)
[double]$J1 = [System.Math]::Floor($YY + $S * [System.Math]::Floor($A / 7))
$J1 = -1 * [System.Math]::Floor(([System.Math]::Floor($J1 / 100) + 1) * 3 / 4)

$JD = $JD + $DD + ($GGG * $J1)+[System.Math]::Floor(275 * $MM / 9)

$JD = $JD + 1721027 + 2 * $GGG + 367 * $YY - 0.5
[double]$K1 = ($JD + 1.5)
[double]$K2 = ($K1 / 7)
[double]$K3 = $K2 - [System.Math]::Floor($K2)
[double]$JS = [System.Math]::Round($K3 * 7 + 0.000000000317)

[double]$Z = ($JD + 0.5)
[double]$AH = [System.Math]::Floor(($Z * 30 - 58442554) / 10631)
[double]$R2 = $Z - [System.Math]::Floor(($AH * 10631 + 58442583) / 30)
[double]$M = [System.Math]::Floor(($R2 * 11 + 330) / 325)
[double]$R1 = $R2 - [System.Math]::Floor(($M * 325 - 320) / 11)
[double]$J = $R1 + 1

$trM = @("Mouharram", "Safar", "Rabia Al-Awwal", "Rabia Al-Thani", "Joumada Al-Awwal", "Joumada Al-Thani", "Rajab", "Chaaban", "Ramadan", "Chawwal", "Dhou Al-Qida", "Dhou Al-Hijja")
$trJ = @("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
#ajustement Maroc $J=$J-1
$J=$J-1
Write-Host "Au MAROC nous sommes le " $trJ[$JS - 1], $J, $trM[$M - 1], $AH , "au calendrier Musulman "



}

bon usage
pour appeler cette foncion en powershell :
JulienHijRi 24 12 2014
résultat:
PS C:\Users\user> JulienHijRi 24 12 2014
Au MAROC nous sommes le Mercredi 1 Rabia Al-Awwal 1436 au calendrier Musulman
Commenter la réponse de dindinfb

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.