Berechnet den Wochentag zu einem gegebenen Datum im Gregorianischen oder Julianischen Kalender. Kann diesen dann per String ausgeben.
Um beispielsweise einen Wochentag im Gregorianischen Kalender zu berechnen führt man folgenden Befehl aus:
Console.WriteLine(ZellersCongruenceToString(ZellersCongruenceGregorian(dd,mm,yyyy)));
public static int ZellersCongruenceGregorian(double dd, double mm, double yyyy)
{
int h = 0;
double q = dd;
double m = mm;
double y = yyyy;
double J = 0;
double K = 0;
AdjustMonth(ref m, ref y);
GetJK(y, ref J, ref K);
//Die Formel selbst kann in einer einzelnen Zeile implementiert werden.
h = (int)((q + Math.Floor(((m + 1) * 26) / 10) + K + Math.Floor(K / 4) + Math.Floor(J / 4) - 2 * J) % 7);
return h < 0 ? h + 7 : h;
}
//Erhält Tag, Monat und Jahr als Argument
public static int ZellersCongruenceJulian(double dd, double mm, double yyyy)
{
int h = 0;
double q = dd;
double m = mm;
double y = yyyy;
double J = 0;
double K = 0;
AdjustMonth(ref m, ref y);
GetJK(y, ref J, ref K);
//Wir müssen die Formel nur minimal ändern um einen Wochentag im Julianischen Kalender zu berechnen.
h = (int)((q + Math.Floor(((m + 1) * 26) / 10) + K + Math.Floor(K / 4) + 5 - J) % 7);
return h < 0 ? h + 7 : h;
}
private static void GetJK(double y, ref double J, ref double K)
{
J = Math.Floor(y / 100);
K = y - J * 100;
}
private static void AdjustMonth(ref double m, ref double y)
{
#region Hier werden Monat und Jahr angepasst für den Fall, dass es sich um den Januar oder Februar handelt
switch ((int)m)
{
case 1:
m = 13;
y--;
break;
case 2:
m = 14;
y--;
break;
}
#endregion
}
public static string ZellersCongruenceToString(int h)
{
//Hier entscheiden wir welchem Wochentag der gegebene Wert entspricht
//und liefern den entsprechenden Wochentag als String aus.
switch (h)
{
case 0:
return "Saturday";
case 1:
return "Sunday";
case 2:
return "Monday";
case 3:
return "Tuesday";
case 4:
return "Wednesday";
case 5:
return "Thursday";
case 6:
return "Friday";
default:
return "Could not convert given number to a String.";
}
}
5 Kommentare zum Snippet