Aktuelle Woche ermitteln

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von wincnc.

    Hallo

    Es gibt eine einfache Art, die ist aber nicht immer genau.

    VB.NET-Quellcode

    1. MsgBox(DatePart(DateInterval.WeekOfYear, Now, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays))


    Manchmal kommt es auch vor, dass die 1. Kw noch im alten Jahr beginnt.
    Damit funktioniert es.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim sKW As String = DateToWeek(Now)
    4. MsgBox(sKW.Substring(4, 2))
    5. End Sub
    6. Public Function DateToWeek(ByVal dDate As Date) As String
    7. ' Startdatum der ersten Kalenderwoche des Jahres und Folgejahres berechnen
    8. Dim dThisYear As Date = CalendarWeek(1, dDate.Year)
    9. Dim dNextYear As Date = CalendarWeek(1, dDate.Year + 1)
    10. ' Prüfen, ob Datum zur ersten Woche des Folgejahres gehört
    11. If dDate >= dNextYear Then
    12. ' Rückgabe: KW 1 des Folgejahres
    13. Return dDate.Year + 1 & "01"
    14. Else
    15. ' KW = Differenz zum ersten Tag der ersten Woche
    16. Return dDate.Year & Format$(dDate.Subtract(dThisYear).Days \ 7 + 1, "00")
    17. End If
    18. End Function
    19. Public Function CalendarWeek(ByVal nWeek As Integer, _
    20. ByVal nYear As Integer) As Date
    21. ' Wochentag des 4. Januar des Jahres ermitteln
    22. Dim dStart As New Date(nYear, 1, 4)
    23. Dim nDay As Integer = (dStart.DayOfWeek + 6) Mod 7 + 1
    24. ' Beginn der 1. KW des Jahres
    25. Dim dFirst As Date = dStart.AddDays(1 - nDay)
    26. ' Gesuchte KW ermitteln
    27. Return dFirst.AddDays((nWeek - 1) * 7)
    28. End Function
    29. End Class
    Ich habe auch eine kleine Funktion gebaut.
    Und sie getestet. Einen Fehlerfall konnte ich noch nicht entdecken:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Errechnet die aktuelle Kalenderwoche
    3. ''' </summary>
    4. Public Function GetCurrentWeekOfYear() As Int32
    5. Dim Days As Int16 = 1
    6. For m As Int32 = 1 To Date.Now.Month
    7. Days += Date.DaysInMonth(Date.Now.Year, m)
    8. Next
    9. Days -= (Date.DaysInMonth(Date.Now.Year, Date.Now.Month) - Date.Now.Day)
    10. Return Convert.ToInt32(Math.Ceiling(Days / 7))
    11. End Function