Hallo
Ich muss den Leuten in der Firma auf dem Zeiterfassungsterminal den ersten Werktag im Monat speziell "hervorheben".
Die Sondertage (Feiertage, Betriebsurlaube, ...) habe ich bereits in einem Array bereit.
Hat das schon mal wer gemacht oder kann mir da helfen? Ich steh da etwas daneben. 😦
Danke, Thomas
Google: c# First Working Day of Month
Sollte man mal gelesen haben:
mist, war zu langsam 😃
Hallo zusammen,
euch ist schon bewusst dass es zwischen Werktag und Arbeitstag einen Unterschied gibt?
Werktag - Wikipedia
Wenn merlin.AT wirklich Werktage ermitteln wollte sind beide Lösungen falsch 😮)
-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).
Mein Blog: Yellow's Blog auf sqlgut.de
Hallo
Für mich sind Werk-/Arbeitstage Montag bis Freitag ohne Sondertage.
Danke für eure Hilfe, hab durch euch eine Lösung gefunden hoffe ich.
Danke, Thomas
In Deutschland gelten nach § 3 Abs. 2 Bundesurlaubsgesetz (BUrlG) allerdings als Werktag "alle Kalendertage, die nicht Sonn- oder gesetzliche Feiertage sind", also auch Samstage (sofern sie keine gesetzliche Feiertage sind). Man sollte immer explizit dazu sagen, wenn etwas anders gemeint ist.
Servus zsm, da ich aktuell ebenso mit einem ähnlichen Beispiel beschäftigt wird, möchte ich gerne das Thema nochmal aufgreifen und bei meinem Beispiel um Ratschläge, verbesserungen usw bitten. bei mir geht es nicht um den 1. aber vom Prinzip her müsste es gleich sein und zu diesem Tread passen.
Danke im Voraus für eure Antworten
class BuisinessDay
{
public Dictionary<DateTime, string> holidaysDict = AddHolidays();
static Dictionary<DateTime, string> AddHolidays()
{
Dictionary<DateTime, string> newDict = new Dictionary<DateTime, string>();
newDict.Add(DateTime.Parse("2022.1.1"), "Neujahr");
newDict.Add(DateTime.Parse("2022.4.15"), "Karfreitag");
newDict.Add(DateTime.Parse("2022.4.17"), "Ostern");
newDict.Add(DateTime.Parse("2022.4.18"), "Ostermontag");
newDict.Add(DateTime.Parse("2022.5.1"), "Tag der Arbeit");
newDict.Add(DateTime.Parse("2022.5.26"), "Christi Himmelfahrt");
newDict.Add(DateTime.Parse("2022.6.6"), "Pfingstmontag");
newDict.Add(DateTime.Parse("2022.10.3"), "Tag der Deutschen Einheit");
newDict.Add(DateTime.Parse("2022.12.25"), "Weihnachten");
newDict.Add(DateTime.Parse("2022.12.26"), "2.Weihnachtsfeiertag");
return newDict;
}
static bool IsWeekend(DateTime date)
{
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
return true;
return false;
}
static bool IsHoliday(DateTime time, Dictionary<DateTime, string> holidays)
{
foreach (KeyValuePair<DateTime, string> holiday in holidays)
{
if (time == holiday.Key)
return true;
}
return false;
}
public DateTime NextBuisinessDay(DateTime time, Dictionary<DateTime, string> holidays)
{
// ist es so richtig, dass eine DateTime Variable so initialisiert wird?
DateTime newDate = default(DateTime);
if (IsWeekend(time) || IsHoliday(time, holidays))
{
for (int i = 0; i <= 6; i++)
{
if (IsWeekend(time.AddDays(i)) == false && IsHoliday(time.AddDays(i), holidays) == false)
{
newDate = time.AddDays(i);
Console.WriteLine($"myDate: {time.ToString("F")}\t newDate: {newDate.ToString("F")}");
return newDate;
}
}
}
return time;
}
public void OutPut()
{
Console.WriteLine(NextBuisinessDay(DateTime.Parse("2022.4.15"), holidaysDict));
}
}
Mit default erfolgt eine Initialisierung mit dem Standardwert des jeweiligen Typ.
In den Fall ist aber keine Initialisierung notwendig, diese oder eine Zuweisung ist nur vor dem ersten Lesezugriff notwendig.
Mit welchen Wert eine Initialisierung ist eher fachlicher Natur und nicht technischer Natur.
Als Vorschlag was kürzer ist (ungetestet):
// public DateTime NextBuisinessDay(DateTime date, Dictionary<DateTime, string> holidays)
public DateOnly NextBuisinessDay(DateOnly date, Dictionary<DateOnly, string> holidays)
{
while (IsWeekend(date) || IsHoliday(date, holidays))
{
date = date.AddDays(1);
}
return date;
}
@david.m
danke dir für deine Antwort. Haben wir wieder etwas dazu gelernt.
ich weise lokalen Variablen gerne den min Wert zu, weil ich sonst nur wieder eine Fehlermeldung bekomme und bei DateTime hab ich leider nichts gefunden was der min Wert ist. Darum meine Frage.