Laden...

Aus Kalenderwoche ein Datum errechnen

8 Antworten
15,268 Aufrufe
Letzter Beitrag: vor 17 Jahren
Aus Kalenderwoche ein Datum errechnen

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

edit: Wie sind eigentlich die Kalenderwochen definiert?

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

Das scheint zu funktionieren, vielen Dank!