Hy,
hat jemand evtl eine Ahnung, wie ich aus einer Kalenderwoche und dem zugehörigen Jahr, den ersten Montag des dazu passenden Datums errechnen kann ?
Beispiel:
Kalenderwoche: 33
Jahr : 2006
Ergibt als Ergebnis
Montag, 14. August 2006
Hallo Mumpitz,
Forumssuche nach Kalenderwoche sollte helfen, auch wenn da meist der umgekehrte Fall besprochen wird.
herbivore
moin Mumpitz,
mal ne kleine anleitung
suche datum des ersten donnerstags im jahr
dann zu dem datum (((woche - 1) * 7) - 3) tage hinzuzählen
ich denke das sollte ausreichen
mfg
oder so
public static DateTime StartDay(int KW)
{
try
{
int _tempweek = 0;
if (0 < KW && KW < 53)
{
// auslesen der eingestellten Systemsprache
CultureInfo CUI = CultureInfo.CreateSpecificCulture("de-DE");
// festlegen von FirstDate auf den 01.01. des aktuellen Jahres
DateTime FirstDate = new DateTime(CUI.DateTimeFormat.Calendar.GetYear(DateTime.Now), 1, 1);
// solange bis _tempweek = der eingestellten Kalenderwoche ist
while (_tempweek < KW)
{
FirstDate = FirstDate.AddDays(1);
_tempweek = CUI.Calendar.GetWeekOfYear(FirstDate,
CUI.DateTimeFormat.CalendarWeekRule,
CUI.DateTimeFormat.FirstDayOfWeek);
}
DayOfWeek FirstDay = CUI.Calendar.GetDayOfWeek(FirstDate);
return FirstDate;
}
else
{
throw new ArgumentOutOfRangeException("KW");
}
}
catch (Exception e)
{
throw new Exception(String.Format("Eingabe ausserhalb der 0 < Eingabe < 53", e.Message));
}
}
raik
@kiar
Deine StartDay() Methode kommt grundsätzlich mit einem Jahreswechsel nicht klar.
Bsp.
Aktuell 2007/2008: Der 31.12.2007 (Montag) liegt in der 1. KW 2008.
Er berechnet aber dann das Datum von der 1.KW 2007 aus. Das liegt daran weil Du davon ausgehst das das StartDatum immer der 1.1.Year ist.
Moin Joetempes,
Danke für den Hinweis, habe ich ebend gerade gesehen und werde versuchen dies zu ändern, wenn ich die Zeit finde.
Raik
Hallo kiar,
mein Lösungsansatz wäre:
public static DateTime GetMonday(int week, int year)
{
// die 1. KW ist die mit mindestens 4 Tagen im Januar des nächsten Jahres
DateTime dt = new DateTime(year, 1, 4);
// Beginn auf Montag setzten
dt = dt.AddDays(-(int)((dt.DayOfWeek != DayOfWeek.Sunday) ? dt.DayOfWeek - 1 : DayOfWeek.Saturday));
// Wochen dazu addieren
return dt.AddDays(--week * 7);
}
Grüße él toro
Das scheint zu funktionieren, vielen Dank!