Sonntag, 7. April 2024

Feiertage berechnen


Eine Sache hatte ich noch offen mit den Feiertagen. Wenn man die Ostertage berechnet, kann auch der Rest der Feiertage berechnet werden.

Viele Feiertage sind auf ihr festgelegtes Datum fixiert. Bei einigen jedoch nicht und haben ihre Abhängigkeit zu den Ostertagen.

 

Benötigt

Rider, Visual Studio 2022 oder Visual Studio Code

Mindestens C# 10 (für TOP LEVEL Statement)

 

Feiertage berechnen

Mit der Eingabe des Jahres, sollen am Ende die Feiertage in der Console ausgegeben werden.

 

Wir feiern die Feste wie sie fallen

In meinem vorigen Blogeintrag habe ich bereits beschrieben, wie die Berechnung von den Osterfeiertagen Funktionen auf Gauß Osterformel setzt. Diese Berechnung wird für einige weitere ebenfalls verwendet. Bei den festen Feiertagen ist klar und unschön, wenn diese auf einen Samstag oder Sonntag fallen.

Zur Vollständigkeit habe ich auch die Berechnung des Ostertages mit reingenommen.

 Console.WriteLine("Calculate German Feiertage!");  
 Console.WriteLine("Enter year:");  
 var year = int.Parse(Console.ReadLine());  
 var feiertage = new List<PuplicHoliday>();  
 var ostermontag = CalculateOstermontag(year);  
 feiertage.Add(new PuplicHoliday(ostermontag, "Ostermontag", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // neujahr  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 1, 1), "Neujahr", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // heilige drei könige  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 1, 6), "Heilige Drei Könige", "BW, BY, ST"));  
 // internationaler frauentag  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 3, 8), "Internationaler Frauentag", "BE, MV"));   
 // karfreitag  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(-2), "Karfreitag", "SL"));  
 // ostersonntag  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(-1), "Ostersonntag", "BB"));  
 // tag der arbeit  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 5, 1), "Tag der Arbeit", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // christi himmelfahrt  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(39), "Christi Himmelfahrt", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // pfingstsonntag  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(49), "Pfingstsonntag", "BB"));  
 // pfingstmontag  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(50), "Pfingstmontag", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // fronleichnam  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(60), "Fronleichnam", "BW, BY, HE, NW, RP, SL"));  
 // mariä himmelfahrt  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 8, 15), "Mariä Himmelfahrt", "BY, SL"));  
 // tag der deutschen einheit  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 10, 3), "Tag der deutschen Einheit", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // reformationstag  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 10, 31), "Reformationstag", "BB, HB, HH, MV, NI, SN, ST, SH, TH"));  
 // allerheiligen  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 11, 1), "Allerheiligen", "BW, BY, NW, RP, SL"));  
 // buß- und bettag  
 feiertage.Add(new PuplicHoliday(ostermontag.AddDays(-47), "Buß- und Bettag", "SN"));  
 // 1. weihnachtstag  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 12, 25), "1. Weihnachtstag", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 // 2. weihnachtstag  
 feiertage.Add(new PuplicHoliday(new DateTime(year, 12, 26), "2. Weihnachtstag", "BW, BY, BE, BB, HB, HH, HE, MV, NI, NW, RP, SL, SN, ST, SH, TH"));  
 var orderedFeiertage = feiertage.OrderBy(x => x.HolidayDate);  
 foreach (var holiday in orderedFeiertage)  
 {  
   Console.WriteLine($"Datum: {holiday.HolidayDate.ToShortDateString()}, Beschreibung: {holiday.Description}, Bundesländer: {holiday.Bundeslaender}");  
 }  
 Console.ReadLine();  
 // statische methode berechnet den ostermontag  
 static DateTime CalculateOstermontag(int year)  
 {  
   var a = year % 19; // Zyklus  
   var b = year % 4;  // Schaltjahr  
   var c = year % 7;    
   var k = year / 100;   
   var p = (8 * k + 13) / 25;   
   var q = k / 4;   
   var m = (15 + k - p - q) % 30; // Korrektur Sonntag und Montag gleichung  
   var n = (4 + k - q) % 7;    // Korrektur Sonnengleichung  
   var d = (19 * a + m) % 30;   // Mondentfernung  
   var e = (2 * b + 4 * c + 6 * d + n) % 7;  
   var day = 22 + d + e;  
   return (new DateTime(year, 3, 1)).AddDays(day);  
 }  
 public class PuplicHoliday  
 {  
   public PuplicHoliday(DateTime holidayDate, string description, string bundeslaender)  
   {  
     this.HolidayDate = holidayDate;  
     this.Description = description;  
     this.Bundeslaender = bundeslaender;  
   }  
   public string Bundeslaender { get; }  
   public string Description { get; }  
   public DateTime HolidayDate { get; }  
 } 

 

Wird der Code ausgeführt, sollte am Ende in der richtigen Reihenfolge, die Feiertage im Consolen Fenster zu lesen sein.



 

Zum Schluss

Wenn man das einmal durch gegangen ist, ist die Berechnung der restlichen der Feiertage simple umzusetzen.

 

Referenzen

Gesetzliche Feiertage in Deutschland – Wikipedia

 

Montag, 4. März 2024

Tool Lagerverwaltung (Teil 8) Nuget Paket bereit gestellt

Nun habe ich endlich ein Template fertig, auf dem ich das Tool entwickeln kann und auch für andere Anwendungen, die ich noch schreiben werden mit .NET MAUI. Ich konnte mich wieder etwas Geistig Sammeln und jetzt kann der nächste Schritt getätigt werden.

 

Benötigt

Visual Studio 2022 oder Rider 2023.3.3

nuget Account (zum hochladen einges nuget Paket)

 

Frontend und .NET

Das bestehende Projekt soll auf .NET MAUI umgestellt werden und auf .NET 7.

 

Projekt Aktualisieren

Warum nicht .NET 8? Beim versucht auf die aktuelle Version, hatte ich noch Probleme, die ich noch nicht verstanden habe. Zeitlich bin ich allerdings auch nicht dazu gekommen, dies zu ergründen.

 

Fehler entdeckt

Beim Testen mit dem Template traten zunächst keine gleich auffallende Fehler auf. Aber nach dem ich das Template angewendet habe für die Solution des WarehouseManagement, musste ich feststellen, dass der Hover Effekt sich nicht zurück setzt auf den Normal zu stand.


Bevor der Fehler behoben wird

Einerseits habe ich nicht beschrieben, wie die Darstellung eines Buttons sich zeigen soll. Andererseits hat man als Benutzer ein gewisse Erwartung wie verwendbare Buttons reagieren soll oder suggerieren soll, ob der Button in der Auswahl liegt.

Also bevor ich zur Fehlerbehebung gehe, definiere ich die Grafischen Darstellung des Buttons und das Wiki für das Application Framework.

Folgende Zustände für den Button werden beschrieben: Normal, Disabled, Pressed, PointerOver


Die Beschreibung ist technisch und sehr auf die Wesentlichen Inhalt beschrieben.

Fertige Seite: Steuerelemente_ButtonPage · Codexzier/Codexzier.Maui.ApplicationFramework Wiki (github.com)


Was ist nun mit den Zuständen, die nicht definiert sind? Die gehe ich an, wenn weitere Zustände gebraucht werden. Das gilt natürlich auch für andere Steuerelemente.

 

Beben

Zuerst dachte ich, der Fehler wäre simple. Den im Style für Visual State 'Normal' habe ich nicht den BackgroundColor nicht festgelegt. War leider nicht das Problem

Das Problem war mit dem Kompilierten Ergebnis in der Release Version. Nachdem ich das Debug kompilierte variante  hochgeladen habe und das Projekt aktualisierte, funktionierte das zurückstellen der Grundfarbe des Buttons.

Warum hier ein Problem mit Release besteht, werde ich zu einem anderen Zeitpunkt heraus finden müssen.

 

Routine finden

Noch ist das keine Gängiger Vorgang. Im Business habe ich bisher keinen Gängigen Vorgang gefunden oder geschweige, dass Fehler in der Reihenfolge Anforderung prüfen, Dokumentation erweitern und dann erst behoben wird.


Links

Samstag, 24. Februar 2024

Werbung auf dem Blog abgestellt


Die AdSense auf meinem Blog hatte ich mir letzten nochmal angesehen und muss sagen, dass Werbung mich nervt. Und das so sehr, dass ich Adsense entfernt habe. Den mit dem Popup Ähnlichen Werbung und Werbebanner zwischen den Blogpost empfinde ich als sehr penetrant und ist oft ein Grund, warum ich einige Blogs und Webseiten verlasse.

Brauche ich AdSense
Nicht wirklich. Damals wollte ich sehen, ob man damit Geld verdienen kann. Ja das geht, aber nach über 10 Jahren habe ich 24 € eingenommen. Ausgezahlt wird erst ab einer bestimmten Summe, ich glaube mit 70 € werden die Einnahmen ausgezahlt. Wenn das so bei mir bleibt, habe ich zum Renteneintritt meine erste Auszahlung. 
Ok, ich poste nicht regelmäßig und meine Reichweite schöpfe ich nicht aus. Da ist noch Potenzial nach oben, mit dem ich die Zielsumme schneller erreichen könnte.

AdSense kann man einstellen
Ja das kann man einstellen und das hatte ich auch bereits so angepasst, dass nur oben und einen Seitenbanner erschien. Das fand ich ok. OK fand ich das nicht, als ich jemanden meinem Blog zeigte, dass sich ein Popup Ähnliche Werbung erschien, den ich nicht zugestimmt habe.
Und nachdem ich das Design geändert habe, war das so viel Werbung zu sehen, dass ich keine Notwendigkeit darin sah, AdSense weiter noch zu verwenden. Haben wir im Alltag eh schon zu viel Werbung?

Fazit
Wir wollen alle gerne an unseren Werken etwas verdienen. Aber wir wollen den Nutzer auch nicht vergraulen. Dezent und Sinnvolle Werbung ist in Ordnung, aber sobald eine Webseite voll mit Werbebannern ist, frage ich mich immer als erstes, wie seriös ist diese Webseite. Ab dem Punkt überlegt der Nutzer, sowie ich, ob ich die Webseite verlasse und weitersuche. 
Ich befürchte immer auf einer Webseite mit zu viel Werbung, dass man sich verklickt und sich einen Virus einfangen könnte.

Samstag, 10. Februar 2024

Tool Lagerverwaltung (Teil 7) Projekt stand

Im Januar hatte ich den Blog Post geschrieben, in dem ich das Problem mit der Resource aus andere Assembly gelöst hatte. Die Lösung war peinlich einfach gewesen, aber ich denke, das vielleicht die Information den einen oder anderen weiterhelfen kann.

Aber kommen wir zu dem Tool für Lagerverwaltung, das auf Grund erhöhten Aufwand bei meiner Arbeit, die ich bei meinem Kunden aktuell habe. Ein Thema, über das ich in meinem Zukünftigen Buch schreiben werde, wenn ich genug Erfahrungen aus den Projekten zusammengetragen und Humorvoll ausgearbeitet habe.

 

Aber kommen wir zu dem eigentlich Thema für heute. Wo stehe ich gerade mit dem Projekt?

 

Benötigt

  • Github
  • Visual Studio 2022
  • .NET 7 (oder höher)

 

Zusammenfassen

Was sind meine nächsten Ziele, damit ich das Tool weiter entwickeln kann und welche Funktionen kommen in das Codexzier Application Framework.

 

Aktueller Stand

  • Die Solution mit mehrere Projekten Inhalten ist da.
  • Das UI Projekt selbst ist noch in WPF. Beim letzten mal wurde nur das Codexzier Application Framework für .NET MAUI angelegt.
  • In den Issues habe ich nur die eine Aufgabe Konzept ausschreiben.
  • Das Konzept selbst steht noch nicht im Wiki und muss noch als eigenes Kapitel abgelegt werden.
  • Eine Wiki in Github anlegen für das Tool ist auch schon angelegt. Das andere Wiki war für das Codexzier Application Framework für WPF und eine neue Ausführung mit .NET MAUI ist offen.

 

Wo fange ich an?

Eigentlich worauf ich Lust habe, aber ich kann nicht alles auf einmal erledigen. Also Entwickle ich die Grundfunktionalitäten, die ich allgemein brauche und die ebenfalls für das Tool relevant sind, aber auch für meine anderen Pojekte, über die ich auch offen habe.

 

Ich brauche allgemein

  • Die Projekte in der Solution aktualisieren nach .NET 8
  • Eine Druckfunktion
  • Style anlegen für Datagrid

 

Kleine Schritte

Zeitlich bin ich viel eingebunden. Wer ist das nicht, wenn man Beruflich mehr als 40 Stunden arbeitet und darüber noch eine Familie hat, mit der man gerne Zeit verbringt. Eigentlich kann ich die Privaten Projekte lassen und auch das schreiben eines Blogpost lassen. Dennoch müssen wir hin und wieder Dinge erlernen und ich lerne durch Probieren und darüber schreiben.

Montag, 5. Februar 2024

Problem bei der Entwicklung mit MS Office Interop


So ganz habe ich nicht verstanden warum das Hinzufügen des Nuget Paket Microsift.Office.Interop.Word (andere Office Interop Pakete) nicht ausreicht. Nach dem ich das Paket hinzugefügt habe und versucht habe nur die Application zu instanziieren, bekam ich einen Ausnahmefehler.

 

Verwendete Umgebung

  • Windows 11
  • Visual Studio 2022
  • Office365 Installation

 

Nur zum laufen bringen

Die Consolen Anwendung soll eine Instanz von Word starten.

 

Die Variante, die nicht geht

Zur Vollständigkeit, wie ich zu dem Ausnahmefehler kam, bei der Verwendung des NuGet Pakets.

 


Und zum Testen ein kurzer Code Schnipsel, der eigentlich ausführbar sein sollte.

 using Microsoft.Office.Interop.Word;  
 Console.WriteLine("Start office application! Solution 1");  
 var app = new Application  
 {  
   Visible = true  
 };  
 Console.WriteLine("Office application started!");  
 Console.WriteLine("Press any key to close the application!");  
 Console.ReadLine();  
 // close the application  
 app.Quit();  

Die Assembly Datei konnte nicht gefunden werden, aber ich konnte nicht erkennen woran das lag. Die zu verwendete Assembly landet nach dem Kompilieren ebenfalls im selben Ordner.

 System.IO.FileNotFoundException  
  HResult=0x80070002  
  Message=Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'. Das System kann die angegebene Datei nicht finden.  
  Source=<Cannot evaluate the exception source>  
  StackTrace:  
 <Cannot evaluate the exception stack trace>  

 

Alternative Lösung

Statt das NuGet Packet zu verwenden, wird bereits auf eine installierte Bibliothek zugegriffen.



Kompiliert und gestartet wird wieder mit dem selben Code Schnipsel.

 using Microsoft.Office.Interop.Word;  
 Console.WriteLine("Start office application! Solution 2");  
 var app = new Application  
 {  
   Visible = true  
 };  
 Console.WriteLine("Office application started!");  
 Console.WriteLine("Press any key to close the application!");  
 Console.ReadLine();  
 // close the application  
 app.Quit();  

Wird die Anwendung ausgeführt, sollte sich die Word Anwendung ohne Seite starten.

 


Drück mit der Consolen Anwendung eine Taste, wird der Schließen Befehl ausgeführt und die Word Anwendung sollte sich dann schließen.

 

Warum geht das (nicht)?

Das habe ich mich auch gefragt und wird zunächst ein offener Punkt bleiben.

Die Installierte Assembly zu verwenden ist klar, dass muss funktionieren. Hat bereits vor 10 Jahren so funktioniert und geht auch heute noch.

Aber wenn man die Office Assembly per NuGet Paket einbinden kann, sollte dies auch gehen. Die Beschreibung von Microsoft (Link) beschreibt bzw. gibt einen Hinweis, dass die Implementierung abweichen kann von der Beschreibung. Dennoch frage ich mich, wo meine Consolen Anwendung schaut, wenn versucht wird das NuGet Paket zu verwenden.

 

Es geht doch (noch)

Im letzten Absatz habe ich mir die Frage schon fast beantwortet. Wenn man nicht gerade auf der aktuellsten .NET unterwegs ist, funktioniert die Beschreibung von Microsoft genau so wie beschrieben. Wenn das Projekt mit .NET Framework 4.8 eingestellt ist, also bevor die .NET Welt aufgeräumt wurde, dann funktioniert dies auch. Code ist praktisch das selbe, nur halt ohne TOP Level Statement.


Samstag, 27. Januar 2024

.NET MAUI - Problem beim Einbinden einer Resource aus andere Assembly


Eigentlich war der Fehler sehr dämlich von mir, aber ich bin wegen der mir unbekannten Fehlermeldung nicht auf das gekommen, was eigentlich die Ursache war. Nachdem ich den Fehler Verstand, dachte ich, ich schreibe das mal auf als Blogeintrag. Aber andererseits habe ich auch zu dem Thema im Internet nichts gefunden.

 

Benötigt

  • Visual Studio 2022
  • Mindestens .NET 7
  • .NET MAUI Application
  • .NET MAUI Library

 

Was ist das Ziel?

Die Styles für die Steuerelemente, sollen über eine andere Assembly geliefert werden. Damit dies funktioniert, muss in der Application die Resource in der App.xaml eingetragen werden. Für das Beispiel ist in der Assembly eine Resource abgelegt mit einem Color Style, welches mit einem Key Wert gesetzt ist. In der Application soll dann der Style mit StaticResource einsetzbar sein.

 

Umfeld für Style aufbauen

In der Resource ist ein Style zu einem Color angelegt. Hier nehme ich eine Sache vorweg, hier fehlt die Klasse und komme im späteren Schritt wieder darauf zurück.

 

Damit meine Application darauf zugreifen kann, muss die Assembly in die Abhängigkeiten hinzugefügt werden.

Rechte Maustaste auf Dependencies und im Kontext Menü 'Add Project Reference'


Dann aus der Projektübersicht der Solution, die zu verwendende Bibliothek auswählen.


In der Anwendung muss in die Datei App.xaml die Reference händisch eingetragen werden. Automatische Vervollständigung funktioniert an der Stelle nur zum Teil.


Nun der Merge, um hier die Styles einzubinden. Das Unterstreichen zeigt uns an der Stelle ein Problem.


Am Anfang habe ich bereits erwähnt, dass in der Datei CodexzierTheme.xaml die Klasse fehlt.


Also bringen wie die Klasse noch ein.


Der Fehler in der Anwendung aus der Datei App.xaml ist nun weg.


Auf der MainPage.xaml, habe ich ein Rechteck, welches als Hintergrundfarbe den Style aus der Assembly bekommt. Leider lässt sich das nicht über die Autovervollständigung nicht eintragen.

 

Bis hier her, sieht die Sache in Ordnung aus, mit Ausnahme, dass die Ressource hier nicht gefunden wird über IntelliSense. Ich starte die Anwendung mit F5 und direkt nach dem Start erhalte ich bereits meinen Fehler, den ich bereits als Titelbild gewählt habe.

 

Was fehlt?

Eigentlich sollte klar sein, dass hier die Klasse selbst für die Resource fehlt. In WPF, Silverlight, UWP und XAML musste die Klasse nicht mit eingebunden werden. Bei Xamarin habe ich keine Erfahrungswerte.

 

Per Copy und Paste, habe ich meine ResourceDictionary Datei und nur Namentlich angepasst. Was ich zu diesen Punkt nicht wusste, dass im .NET MAUI zur ResourceDictionary ebenfalls eine Partial Klasse zugeordnet wird.

Nach dem ich zum testen eine ResourceDictionary aus dem .NET MAUI-Templates hinzugefügt habe, war schon gleich der unterschied zu sehen.


Nachdem ich dies so übernahm, ging auch der Aufruf über IntelliSense …


… und die Anwendung ließ sich dann starten mit der gewünschten Farbe aus dem Style.

 

Schlusswort

Wenn das auf der Microsoft Seite so steht, dann funktioniert das auch in der Regel. Das wäre mir auch neu gewesen, wenn eine Beschreibung nicht dem entspricht. Aber meine Erfahrung hat mich an der Stelle in die irre geführt. Die Suche über das Internet ergab ähnliche Ergebnisse, aber keines wies darauf, welche Abhängigkeiten im Umfeld notwendig sein sollten, damit das Einbinden von Resourcen aus einer anderen Assembly funktioniert.


Links

Resource dictionaries - .NET MAUI | Microsoft Learn

Dienstag, 12. Dezember 2023

Ostersonntag und Ostermontag berechnen


Eine Aufgabe auf der Arbeit brachte mich dazu, daran zu denken, dass Offizielle Feiertage ja berechnet werden könnte. Somit kam ich auf einen Blog, welches die Feiertage mit SQL Sripts löste. Leider schien dies nicht ganz klar zu sein, für welche Datenbank. Ist jedoch nichts, was mich aufhält und nahm die Wikipedia Beschreibung über Gausche Osterformel (Wiki).

Verwunderlich ist, dass meine Suche im Internet keine Ergebnisse erbrachte für MS SQL. Manchmal glaube ich, dass mir die Suche absichtlich keine oder kaum brauchbare Ergebnisse zeigt.

 

Benötigt

Rider oder Visual Studio für C#

 

Wann ist Ostern für das Jahr

Mit Eingabe des Jahr, soll mir der Ostersonntag und Ostermontag berechnet werden.

 

Gaußsche Osterformel

Seien wir doch ehrlich, wie ist man auf so eine Formel nur gekommen. Bis letzte Woche dachte ich, dass wird irgendwie entschieden und fertig. Aber weit gefehlt. Im Gegensatz zu anderen Feiertagen, ist dieser immer an einem Sonntag und Montag. Oder schon mal was vom Osterdienstag gehört. Die anderen Feiertage sind an ihrem festen Datum platziert.

 

Folgender Code ermöglicht die Eingabe und Ausgabe einer C# Consolen Anwendung. Für die Berechnung werden nur Ganzzahlen verwendet und die Funktion Modulo.

 Console.WriteLine("Calculate Ostern");  
 Console.WriteLine("Enter year:");  
 var year = int.Parse(Console.ReadLine());  
 var a = year % 19; // Zyklus  
 var b = year % 4;  // Schaltjahr  
 var c = year % 7;    
 var k = year / 100;   
 var p = (8 * k + 13) / 25;   
 var q = k / 4;   
 var m = (15 + k - p - q) % 30; // Korrektur Sonntag und Montag gleichung  
 var n = (4 + k - q) % 7;    // Korrektur Sonnengleichung  
 var d = (19 * a + m) % 30;   // Mondentfernung  
 var e = (2 * b + 4 * c + 6 * d + n) % 7;  
 var day = 22 + d + e;  
 var ostersonntag = (new DateTime(year, 3, 1)).AddDays(day - 1);  
 var ostermontag = ostersonntag.AddDays(1);  
 Console.WriteLine($"Ostersonntag: {ostersonntag:dd.MM.yyyy}");  
 Console.WriteLine($"Ostermontag: {ostermontag:dd.MM.yyyy}");  
 Console.WriteLine("Press any key to exit"); 

 

Ausnahmen

Wie in jeder Sache kommen auch Ausnahmen vor, die selbst der Algorithmus nicht hergibt. An der Stelle kann ich kann ich nur auf die Wiki Seite oder einer anderen Lektüre verweisen.

Elektromotor36GP-555

Der Motor ist heute mit der Post gekommen. Anschließend hatte ich nochmal in die Technischen Daten gesehen. Zugegeben, ich habe den Motorbes...