Feedback

C# - Aus Datum Wochentag ermitteln

Veröffentlicht von am 15.01.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
GFU-Schulungen  [Anzeige]

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

 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 15.01.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 16.01.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 21.02.2011:
Gratulation (!) - noch umständlicher kann man das kaum machen.
Christopher Kk schrieb am 23.02.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!