Tipp 0137 Kalenderwoche eines Datums ermitteln
Autor/Einsender:
Datum:
  Klaus Raudszus
26.09.2006
Entwicklungsumgebung:   VB.Net 2005
Framework:   2.0
Dieses Beispiel zeigt, wie zu einem vorgegebenen Datum die Kalenderwoche berechnet werden kann und welches Datum zu einer vorgegebenen Kalenderwoche gehört.
Die Berechnung erfolgt durch der Ermittlung des ersten Tages in einer Kalenderwoche auf der Basis des 4.1 des jeweiligen Jahres. Anschließend muss nur noch geprüft werden, ob ein Schaltjahr vorliegt.
 
Option Strict On

Public Structure CalendarWeek
  Public ReadOnly Week As Integer
  Public ReadOnly Year As Integer

  Public Sub New(ByVal week As Integer, ByVal year As Integer)
    Me.Week = week
    Me.Year = year
  End Sub

  Public Overrides Function ToString() As String
    Return String.Format("KW {0} / {1}", Week, Year)
  End Function
End Structure

Public Class CalcCalendar
  Public Shared Function GetStartCalendarWeek( _
        ByVal intyear As Integer, _
        ByVal intweek As Integer) As DateTime

    Dim dtVierteErste As New DateTime(intyear, 1, 4)
    Dim int As Integer = (dtVierteErste.DayOfWeek + 6) Mod 7 + 1
    Dim dtFirstWeek As DateTime = dtVierteErste.AddDays(1 - int)
    Return dtFirstWeek.AddDays((intweek - 1) * 7)
  End Function

  Public Shared Function GetNumberOfWeek(ByVal year As Integer) _
        As Integer
    Dim tsdiff As TimeSpan = _
          GetStartCalendarWeek(year + 1, 1).Subtract( _
          GetStartCalendarWeek(year, 1))
    Return CInt(tsdiff.Days / 7)
  End Function

  Public Shared Function GetSchaltjahr(ByVal intyear As Integer) _
        As Boolean
    Dim dt As DateTime = DateSerial(intyear, 2, 29)
    Dim intoverflow As Integer = dt.Day
    Return intoverflow = 29
  End Function

  Public Shared Function GetWeekForDate(ByVal dt As DateTime) _
        As CalendarWeek
    Dim year As Integer = dt.Year
    Dim day1 As DateTime = GetStartCalendarWeek(year, 1)
    Dim day2 As DateTime = GetStartCalendarWeek(year + 1, 1)
    If DateTime.op_GreaterThanOrEqual(dt, day2) Then
      Return New CalendarWeek(1, year + 1)
    Else
      If DateTime.op_GreaterThanOrEqual(dt, day1) Then
        Return New CalendarWeek(CInt(( _
              dt.Subtract(day1).Days \ 7) + 1), year)
        Else : Return New CalendarWeek( _
              GetNumberOfWeek(year - 1), year - 1)
      End If
    End If
  End Function
End Class
 
Weitere Links zum Thema
Datumsformat (länderspezifisch)
Datumsformate konvertieren (RegExp)
UTC-, Normal- und Sommer-Zeit ermitteln

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (52,4 kB) Downloads bisher: [ 654 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 22. Januar 2012