|
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
|
|