Feedback

C# - Aus Datum Wochentag ermitteln

Veröffentlicht von am 1/15/2011
(4 Bewertungen)
Mit diesem Snippet wird aus einem Datum der Wochentag berechnet. Es werden Schaltjahre berücksichtigt.

Hinweis:
Natürlich kann man Datentypen, Variablen usw. ändern. Das hier ist nur ein grober Entwurf.

Beispiel-Aufruf:

string wochentag = getwochentag("15.01.2011")


Viel Spaß damit
 private string getwochentag(string datum)
        {

            string[] felder = datum.Split(new char[] { '.' }); 
            int tag = Convert.ToInt32(felder[0]);
            int monat = Convert.ToInt32(felder[1]);
            string wochentag = "";
            int chkschaltjahr = monat;
            int tagesziffer = tag % 7; 

            switch (monat)
            {
                case 1:
                    monat = 0;
                    break;
                case 2:
                    monat = 3;

                    break;
                case 3:
                    monat = 3;
                    break;
                case 4:
                    monat = 6;
                    break;
                case 5:
                    monat = 1;
                    break;
                case 6:
                    monat = 4;
                    break;
                case 7:
                    monat = 6;
                    break;
                case 8:
                    monat = 2;
                    break;
                case 9:
                    monat = 5;
                    break;
                case 10:
                    monat = 0;
                    break;
                case 11:
                    monat = 3;
                    break;
                case 12:
                    monat = 5;
                    break;
            }

           int jahr = Convert.ToInt32(felder[2].Remove(0, 2));
           int jahresziffer = (jahr + (jahr / 4)) % 7;
           int jahrzehnt = Convert.ToInt32(felder[2].Remove(2, 2));
           int zs2 = jahrzehnt % 4;
           int zs3 = 3 - zs2;
           int jahrhundert = zs3 * 2;
           int wochenziffer = (jahrhundert + jahresziffer + monat + tagesziffer) % 7;

           if (chkschaltjahr == 1 || chkschaltjahr == 2)
           {
               switch (wochenziffer)
               {
                   case 1:
                       wochentag = "Sonntag";
                       break;
                   case 2:
                       wochentag = "Montag";
                       break;
                   case 3:
                       wochentag = "Dienstag";
                       break;
                   case 4:
                       wochentag = "Mittwoch";
                       break;
                   case 5:
                       wochentag = "Donnerstag";
                       break;
                   case 6:
                       wochentag = "Freitag";
                       break;
                   case 0:
                       wochentag = "Samstag";
                       break;
               }
           }
           else
           {
               switch (wochenziffer)
               {
                   case 0:
                       wochentag = "Sonntag";
                       break;
                   case 1:
                       wochentag = "Montag";
                       break;
                   case 2:
                       wochentag = "Dienstag";
                       break;
                   case 3:
                       wochentag = "Mittwoch";
                       break;
                   case 4:
                       wochentag = "Donnerstag";
                       break;
                   case 5:
                       wochentag = "Freitag";
                       break;
                   case 6:
                       wochentag = "Samstag";
                       break;
               }
           }
           return wochentag;
        }
Abgelegt unter wochentag, datum, datetime, schaltjahr, zeit.

4 Kommentare zum Snippet

Christian Glowinski schrieb am 1/15/2011:
Eine sehr lange Implementierung, aber interessant zu sehen.
Wer es kürzer braucht nutzt und Microsoft vertraut kann dies hier nutzen (Statt Now kann man jedes Datumsobjekt einsetzen!):
string.Format("{0:dddd}",DateTime.Now);

Quelle: http://dotnet-snippets.de/dns/aktuellen-wochentag-ermitteln-SID101.aspx
Das Parsen eines Datums aus einem String funktioniert mit
DateTime.parse(string)

Quelle: http://msdn.microsoft.com/en-us/library/2h3syy57.aspx

Trotzdem ein nützliches Snippet, wenn man an diesem Vorgang irgendwas speziell anpassen muss.
Christopher Kk schrieb am 1/16/2011:
Warum so kompliziert?
Das DateTime Objekt liefert doch schon alles was du brauchst.

DateTime dt = new DateTime(2011, 1, 15);

Console.WriteLine(dt.DayOfWeek);
Holger von Terpitz schrieb am 2/21/2011:
Gratulation (!) - noch umständlicher kann man das kaum machen.
Christopher Kk schrieb am 2/23/2011:
Holger, was sollen die unqualifizierten Kommentare? Es wurde doch bereits gesagt das es anders geht oder hast du noch andere Anregungen, dann raus damit. Wenn nicht, dann lass den Unsinn einfach.
 

Logge dich ein, um hier zu kommentieren!