1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
| Imports System.Globalization
Public Class Form1
Private NumeroSemaineSelecteur, AnneeSelecteur, MaxSemaineAnne As Integer
Private Lundi As DateTime ' lundi du début de la semaine
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
NumeroSemaineSelecteur = WeekNumber(Date.Now)
AnneeSelecteur = AnneeEncours()
LabelSemaine.Text = NumeroSemaineSelecteur.ToString
LabelAnnee.Text = AnneeSelecteur.ToString
MaxSemaineAnne = CalCulNbreSemaineAnnee(AnneeSelecteur) ' on calcule le nombre de semaines dans l'année selectionnée
Label13.Text = "(Semaine" & GetDatesSemaine(NumeroSemaineSelecteur, False) & ")"
End Sub
#Region "Boutons"
Private Sub ButSemainePlus_Click(sender As Object, e As EventArgs) Handles ButSemainePlus.Click
If NumeroSemaineSelecteur >= MaxSemaineAnne Then
AnneeSelecteur = AnneeSelecteur + 1
LabelAnnee.Text = AnneeSelecteur.ToString
NumeroSemaineSelecteur = 1
MaxSemaineAnne = CalCulNbreSemaineAnnee(AnneeSelecteur) ' on calcule le nombre de semaines dans l'année selectionnée
Else
NumeroSemaineSelecteur = NumeroSemaineSelecteur + 1
End If
LabelSemaine.Text = NumeroSemaineSelecteur.ToString
Label13.Text = "(Semaine" & GetDatesSemaine(NumeroSemaineSelecteur, False) & ")"
End Sub
Private Sub ButSemaineMoins_Click(sender As Object, e As EventArgs) Handles ButSemaineMoins.Click
If NumeroSemaineSelecteur <= 1 Then
AnneeSelecteur = AnneeSelecteur - 1
LabelAnnee.Text = AnneeSelecteur.ToString
MaxSemaineAnne = CalCulNbreSemaineAnnee(AnneeSelecteur) ' on calcule le nombre de semaines dans l'année selectionnée
NumeroSemaineSelecteur = MaxSemaineAnne
Else
NumeroSemaineSelecteur = NumeroSemaineSelecteur - 1
End If
LabelSemaine.Text = NumeroSemaineSelecteur.ToString
Label13.Text = "(Semaine" & GetDatesSemaine(NumeroSemaineSelecteur, False) & ")"
End Sub
#End Region
#Region "Fonctions"
''' <summary>
''' Retourne le nombre de semaines dans l'année selectionnée
''' </summary>
''' <param name="AnneRecup"></param>
''' <returns></returns>
Private Function CalCulNbreSemaineAnnee(ByVal AnneRecup As Integer) As Integer
Dim AnneeRecup As Integer = AnneRecup
' Dim Anneesuivante As Integer = AnneeRecup + 1
Dim DateDebutAnnee As Date = Convert.ToDateTime("01/01/" & AnneeRecup.ToString)
Dim DateFintAnnee As Date = Convert.ToDateTime("31/12/" & AnneeRecup.ToString)
' Dim DateDebutNouvelleAnne = Convert.ToDateTime("01/01/" & Anneesuivante.ToString)
Dim ts As TimeSpan = DateFintAnnee - DateDebutAnnee
Dim PremierjourAnnee As String = DateDebutAnnee.ToString("dddd", New CultureInfo("fr-FR"))
' Dim DernierJourAnnee As String = DateFintAnnee.ToString("dddd", New CultureInfo("fr-FR"))
' Dim PremierJourNouvelleAnnee As String = DateDebutNouvelleAnne.ToString("dddd", New CultureInfo("fr-FR"))
Dim Resultat As Integer
Dim AnneeBisextile As Boolean
' on contrôle si c'est une année bisextile
If (DateTime.IsLeapYear(AnneeRecup)) Then
AnneeBisextile = True
Else
AnneeBisextile = False
End If
If AnneeBisextile = True Then
If PremierjourAnnee = "mercredi" Or PremierjourAnnee = "jeudi" Then
Resultat = CInt(ts.TotalDays / 7) + 1
Else
Resultat = CInt(ts.TotalDays / 7)
End If
Else
If PremierjourAnnee = "jeudi" Then
Resultat = CInt(ts.TotalDays / 7) + 1
Else
Resultat = CInt(ts.TotalDays / 7)
End If
End If
Return Resultat
End Function
''' <summary>
''' Retourne la date de début et de fin de la semaine
''' </summary>
''' <param name="NumeroSemaine"></param>
''' <param name="RecupLundi"></param>
''' <returns></returns>
Private Function GetDatesSemaine(NumeroSemaine As Integer, RecupLundi As Boolean) As String
Dim Calendrier As New GregorianCalendar(GregorianCalendarTypes.Localized)
Dim DateLundi, DateVendredi As Date
Dim Semaine As Integer = 0
Dim DateCal As Date = Convert.ToDateTime("01/01/" & AnneeSelecteur.ToString)
While Semaine <> NumeroSemaine
DateCal = DateCal.AddDays(1)
Semaine = Calendrier.GetWeekOfYear(DateCal, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
End While
DateLundi = DateCal
If RecupLundi = True Then Lundi = DateCal ' on ne récupère la date du lundi que de la première semaine
DateVendredi = DateCal.AddDays(4)
Return " du " & DateLundi.ToShortDateString & " au " & DateVendredi.ToShortDateString
End Function
''' <summary>
''' Retourne le numéro de la semaine
''' </summary>
''' <param name="DateJour"></param>
''' <returns></returns>
Private Function WeekNumber(DateJour As DateTime) As Integer
Return New GregorianCalendar(GregorianCalendarTypes.Localized).GetWeekOfYear(DateJour, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
End Function
''' <summary>
''' Retourne l'année en cours
''' </summary>
''' <returns></returns>
Public Shared Function AnneeEncours() As Integer
Return DateTime.Now.Year
End Function
#End Region
End Class |
Partager