Feedback

Kalenderwochen ab 1. Januar

Sprache: C#

Zählt die Kalenderwochen des selektierten Jahres. Die erste Kalenderwoche beginnt am 1.1. des Jahres, egal welcher Wochentag das ist, und wird als Kalendewoche 1 gewertet. Es wird ein 2-Dimensionaler Array zurückgegeben, wobei die 1. Dimension die Kalenderwochen und die 2. Dimension das Datum des jeweiligen Wochentags ist. Bsp.: [23, 0] = 24. KW Montag; [0, 6] = 1. KW Sonntag Größe des Arrays: [anzKW, 7] In dem Array können "llere" Felder entstehen, deshalb muss bei seiner Verwendung darauf geprüft werden. Wenn ein Feld "leer" ist hat es das Datum "01.01.0001".
public Array getDatesFromWeekInput_absolut() //läuft 
        {
            int year = (int)getyearinput()[0];
            int anzKW = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(year, 12, 31), System.Globalization.CalendarWeekRule.FirstDay, System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);

            DateTime startdate = new DateTime(year,1,1); 
            DateTime [,] weeksanddates = new DateTime [anzKW, 7];

            for (int i = 0; i < anzKW; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    DateTime tempdate = startdate;

                    if (i == 0)
                    {
                        if (tempdate.DayOfWeek == DayOfWeek.Monday)
                            weeksanddates[i, 0] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Tuesday)
                            weeksanddates[i, 1] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Wednesday)
                            weeksanddates[i, 2] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Thursday)
                            weeksanddates[i, 3] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Friday)
                            weeksanddates[i, 4] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Saturday)
                            weeksanddates[i, 5] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Sunday)
                        {
                            weeksanddates[i, 6] = tempdate;
                            j = 7;
                        }
                    }
                    else
                    {
                        weeksanddates[i, j] = tempdate;
                    }

                    if (tempdate.Day == 31 && tempdate.Month == 12)
                        break; //Abbruch der kompletten Schleife

                    tempdate = startdate.AddDays(1);
                    startdate = tempdate;

                    
                }
            }
            return weeksanddates;
        }
public Array getDatesFromWeekInput_absolut() //läuft 
        {
            int year = (int)getyearinput()[0];
            int anzKW = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(year, 12, 31), System.Globalization.CalendarWeekRule.FirstDay, System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);

            DateTime startdate = new DateTime(year,1,1); 
            DateTime [,] weeksanddates = new DateTime [anzKW, 7];

            for (int i = 0; i < anzKW; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    DateTime tempdate = startdate;

                    if (i == 0)
                    {
                        if (tempdate.DayOfWeek == DayOfWeek.Monday)
                            weeksanddates[i, 0] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Tuesday)
                            weeksanddates[i, 1] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Wednesday)
                            weeksanddates[i, 2] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Thursday)
                            weeksanddates[i, 3] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Friday)
                            weeksanddates[i, 4] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Saturday)
                            weeksanddates[i, 5] = tempdate;
                        if (tempdate.DayOfWeek == DayOfWeek.Sunday)
                        {
                            weeksanddates[i, 6] = tempdate;
                            j = 7;
                        }
                    }
                    else
                    {
                        weeksanddates[i, j] = tempdate;
                    }

                    if (tempdate.Day == 31 && tempdate.Month == 12)
                        break; //Abbruch der kompletten Schleife

                    tempdate = startdate.AddDays(1);
                    startdate = tempdate;

                    
                }
            }
            return weeksanddates;
        }

2 Kommentare

  1. Geht auch einfacher:
    [code]
    public static int Kalenderwoche(DateTime datum)
    {
    Calendar kalender = CultureInfo.CurrentCulture.Calendar;

    return kalender.GetWeekOfYear(
    datum,
    //CalendarWeekRule.FirstFourDayWeek,
    CalendarWeekRule.FirstDay,
    DayOfWeek.Monday);
    }
    [/code]

  2. Hallo, ja, was du gemacht hast ist auch einfach, jedoch benötige ich nicht nur die Kalenderwoche in der das Datum liegt, sondern ich benötige alle Daten die in einer Kalenderwoche liegen, und soweit ich weiß kann man das leider nicht so einfach abfragen. abgesehen davon kenne ich die von dir gezeigte funktion ja auch, da ich sie ja in meinem prog auch benutze. Grüße