gg00xiv
Messages postés656Date d'inscriptionmercredi 22 août 2001StatutMembreDernière intervention11 mars 2005
-
13 oct. 2004 à 01:08
Gloops1
Messages postés314Date d'inscriptionvendredi 20 février 2009StatutMembreDernière intervention27 septembre 2023
-
22 avril 2019 à 09:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Gloops1
Messages postés314Date d'inscriptionvendredi 20 février 2009StatutMembreDernière intervention27 septembre 2023 Modifié le 22 avril 2019 à 10:31
Passer en paramètre DateTime.ToDay plutôt que DateTime.Now.
OK je sors ...
Ikki2504
Messages postés13Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention26 décembre 2010 10 mai 2010 à 11:15
Merci pour cette source, ça m'a évité de tout me retaper moi-même :-)
D'après mon VDD, le code plante pour Pâques 2013... Et ce que je développe sera obsolète à cette date, donc pas bien grave.
J'ai adapté le return pour mon programme, sinon tout est ok
bouba_zyx
Messages postés2Date d'inscriptionlundi 9 février 2004StatutMembreDernière intervention 9 décembre 2009 9 déc. 2009 à 17:36
plantage en 2013 pour le lundi de pâques :
DateTime dtMondayPaques = new DateTime(dtDate.Year,intMonthPaques,intDayPaques+1);
à remplacer par :
DateTime dtMondayPaques = new DateTime(dtDate.Year, intMonthPaques, intDayPaques).AddDays(1);
sinon super code...
hirex
Messages postés1Date d'inscriptionmardi 12 avril 2005StatutMembreDernière intervention30 juillet 2008 30 juil. 2008 à 17:58
Bonjour,
J'essai d'utiliser le calcul des jours fériés et j'ai un pb avec le Lundi de Paques.
La variable "intDayPaques" est à -8, du coup la ligne Dim dtMondayPaques As New DateTime(dtDate.Year, intMonthPaques, Math.Abs(intDayPaques) - 1) plante.
Quelqu'un a t-il une idée svp.
Merci
quineman
Messages postés72Date d'inscriptionjeudi 30 novembre 2000StatutMembreDernière intervention10 novembre 2008 14 sept. 2007 à 16:50
J'ai fait une traduction en VB.net mais il me trouve paque le 08/04/2007 au lieu du 09/04/2007. Ce qui me décale tout le reste...
Vous voyer d'ou ça peut venir ?
Public Function IsWorkingDay(ByVal dtDate As DateTime) As Boolean
Dim bolWorkingDay As Boolean = True
Dim arrDateFerie As Array
arrDateFerie = Array.CreateInstance(GetType(DateTime), 8)
' 01 Janvier
arrDateFerie.SetValue(New DateTime(dtDate.Year, 1, 1), 0)
' 01 Mai
arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 1), 1)
' 08 Mai
arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 8), 2)
' 14 Juillet
arrDateFerie.SetValue(New DateTime(dtDate.Year, 7, 14), 3)
' 15 Aout
arrDateFerie.SetValue(New DateTime(dtDate.Year, 8, 15), 4)
' 01 Novembre
arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 1), 5)
' 11 Novembre
arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 11), 6)
' Noël
arrDateFerie.SetValue(New DateTime(dtDate.Year, 12, 25), 7)
' Dimanche ou jour férié
If (dtDate.DayOfWeek = DayOfWeek.Sunday) Or Array.BinarySearch(arrDateFerie, dtDate) >= 0 Then bolWorkingDay = False
If bolWorkingDay Then
' Calcul du jour de pâques (algorithme de Oudin (1940))
'Calcul du nombre d'or - 1
Dim intGoldNumber As Integer = CInt(dtDate.Year Mod 19)
' Année divisé par cent
Dim intAnneeDiv100 As Integer = CInt(dtDate.Year / 100)
' intEpacte est = 23 - Epacte (modulo 30)
Dim intEpacte = CInt((intAnneeDiv100 - intAnneeDiv100 / 4 - (8 * intAnneeDiv100 + 13) / 25 + (19 * intGoldNumber) + 15) Mod 30)
'Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
Dim intDaysEquinoxeToMoonFull As Integer = CInt((intEpacte - (intEpacte / 28) * (1 - (intEpacte / 28) * (29 / (intEpacte + 1)) * ((21 - intGoldNumber) / 11))))
'Jour de la semaine pour la pleine lune Pascale (0=dimanche)
Dim intWeekDayMoonFull As Integer = CInt(((dtDate.Year + dtDate.Year / 4 + intDaysEquinoxeToMoonFull + 2 - intAnneeDiv100 + intAnneeDiv100 / 4) Mod 7))
' Nombre de jours du 21 mars jusqu'au dimanche de ou
' avant la pleine lune Pascale (un nombre entre -6 et 28)
Dim intDaysEquinoxeBeforeFullMoon As Integer = intDaysEquinoxeToMoonFull - intWeekDayMoonFull
' mois de pâques
Dim intMonthPaques As Integer = CInt(3 + (intDaysEquinoxeBeforeFullMoon + 40) / 44)
' jour de pâques
Dim intDayPaques As Integer = CInt(intDaysEquinoxeBeforeFullMoon + 28 - 31 * (intMonthPaques / 4))
' lundi de pâques
Dim dtMondayPaques As DateTime = New DateTime(dtDate.Year, intMonthPaques, intDayPaques + 1)
' Ascension
Dim dtAscension As DateTime = dtMondayPaques.AddDays(38)
'Pentecote
Dim dtMondayPentecote As DateTime = dtMondayPaques.AddDays(49)
If (DateTime.Compare(dtMondayPaques, dtDate) 0) Or (DateTime.Compare(dtAscension, dtDate) 0) Or (DateTime.Compare(dtMondayPentecote, dtDate) = 0) Then
bolWorkingDay = False
Else
bolWorkingDay = True
End If
End If
Return bolWorkingDay
End Function
Yogly
Messages postés1Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 5 avril 2007 5 avril 2007 à 12:49
Merci pour ce bout de code ,qu'y ma pérmis d'en faire une version WinDev
fnadaus
Messages postés9Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention11 juillet 2005 11 juil. 2005 à 18:08
Merci pour ce bout de code franchement bien sympatique et utile !
j me suis permis de rajouter le samedi en jour 'non travaillé' ...
gg00xiv
Messages postés656Date d'inscriptionmercredi 22 août 2001StatutMembreDernière intervention11 mars 200513 13 oct. 2004 à 01:08
Un doute sur le lundi de pancôte :) enfin à vérifier dans le temps...
Modifié le 22 avril 2019 à 10:31
OK je sors ...
10 mai 2010 à 11:15
D'après mon VDD, le code plante pour Pâques 2013... Et ce que je développe sera obsolète à cette date, donc pas bien grave.
J'ai adapté le return pour mon programme, sinon tout est ok
9 déc. 2009 à 17:36
DateTime dtMondayPaques = new DateTime(dtDate.Year,intMonthPaques,intDayPaques+1);
à remplacer par :
DateTime dtMondayPaques = new DateTime(dtDate.Year, intMonthPaques, intDayPaques).AddDays(1);
sinon super code...
30 juil. 2008 à 17:58
J'essai d'utiliser le calcul des jours fériés et j'ai un pb avec le Lundi de Paques.
La variable "intDayPaques" est à -8, du coup la ligne Dim dtMondayPaques As New DateTime(dtDate.Year, intMonthPaques, Math.Abs(intDayPaques) - 1) plante.
Quelqu'un a t-il une idée svp.
Merci
14 sept. 2007 à 16:50
Vous voyer d'ou ça peut venir ?
Public Function IsWorkingDay(ByVal dtDate As DateTime) As Boolean
Dim bolWorkingDay As Boolean = True
Dim arrDateFerie As Array
arrDateFerie = Array.CreateInstance(GetType(DateTime), 8)
' 01 Janvier
arrDateFerie.SetValue(New DateTime(dtDate.Year, 1, 1), 0)
' 01 Mai
arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 1), 1)
' 08 Mai
arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 8), 2)
' 14 Juillet
arrDateFerie.SetValue(New DateTime(dtDate.Year, 7, 14), 3)
' 15 Aout
arrDateFerie.SetValue(New DateTime(dtDate.Year, 8, 15), 4)
' 01 Novembre
arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 1), 5)
' 11 Novembre
arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 11), 6)
' Noël
arrDateFerie.SetValue(New DateTime(dtDate.Year, 12, 25), 7)
' Dimanche ou jour férié
If (dtDate.DayOfWeek = DayOfWeek.Sunday) Or Array.BinarySearch(arrDateFerie, dtDate) >= 0 Then bolWorkingDay = False
If bolWorkingDay Then
' Calcul du jour de pâques (algorithme de Oudin (1940))
'Calcul du nombre d'or - 1
Dim intGoldNumber As Integer = CInt(dtDate.Year Mod 19)
' Année divisé par cent
Dim intAnneeDiv100 As Integer = CInt(dtDate.Year / 100)
' intEpacte est = 23 - Epacte (modulo 30)
Dim intEpacte = CInt((intAnneeDiv100 - intAnneeDiv100 / 4 - (8 * intAnneeDiv100 + 13) / 25 + (19 * intGoldNumber) + 15) Mod 30)
'Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
Dim intDaysEquinoxeToMoonFull As Integer = CInt((intEpacte - (intEpacte / 28) * (1 - (intEpacte / 28) * (29 / (intEpacte + 1)) * ((21 - intGoldNumber) / 11))))
'Jour de la semaine pour la pleine lune Pascale (0=dimanche)
Dim intWeekDayMoonFull As Integer = CInt(((dtDate.Year + dtDate.Year / 4 + intDaysEquinoxeToMoonFull + 2 - intAnneeDiv100 + intAnneeDiv100 / 4) Mod 7))
' Nombre de jours du 21 mars jusqu'au dimanche de ou
' avant la pleine lune Pascale (un nombre entre -6 et 28)
Dim intDaysEquinoxeBeforeFullMoon As Integer = intDaysEquinoxeToMoonFull - intWeekDayMoonFull
' mois de pâques
Dim intMonthPaques As Integer = CInt(3 + (intDaysEquinoxeBeforeFullMoon + 40) / 44)
' jour de pâques
Dim intDayPaques As Integer = CInt(intDaysEquinoxeBeforeFullMoon + 28 - 31 * (intMonthPaques / 4))
' lundi de pâques
Dim dtMondayPaques As DateTime = New DateTime(dtDate.Year, intMonthPaques, intDayPaques + 1)
' Ascension
Dim dtAscension As DateTime = dtMondayPaques.AddDays(38)
'Pentecote
Dim dtMondayPentecote As DateTime = dtMondayPaques.AddDays(49)
If (DateTime.Compare(dtMondayPaques, dtDate) 0) Or (DateTime.Compare(dtAscension, dtDate) 0) Or (DateTime.Compare(dtMondayPentecote, dtDate) = 0) Then
bolWorkingDay = False
Else
bolWorkingDay = True
End If
End If
Return bolWorkingDay
End Function
5 avril 2007 à 12:49
11 juil. 2005 à 18:08
j me suis permis de rajouter le samedi en jour 'non travaillé' ...
13 oct. 2004 à 01:08