Hallo zusammen,
ich bin verzweifelt auf der Suche nach einer Funktion, die mir den ersten, zweiten, dritten, vierten und auch letzten Wochentag eines Monats zurückgibt.
Welche Möglichkeit bietet mir C# für dieses Problem?
Als Beispiel nehmen wir das heutige Datum 24.1.2007
Als Ausgabe wäre "4" wünschenswert, da es der 4 Mittwoch im Monat ist.
Umgekehrt wäre es, dass ich den 4ten Mittwoch im Januar suche und das heutige Datum ausgegeben bekomme.
Danke & Gruß aus Krefeld
System.DateTime.Today.DayOfWeek
Nur als kleinen Anreiz...
Hättest auch selber drauf kommen können 😉
mfg
Patrick
Steh ich gerade auf dem Schlauch?
DayOfWeek gibt mir den Wochentag zurück oder nicht?
Ich habe also die Möglichkeit zu prüfen ob heute Mittwoch ist und nicht ob heute der 4te Mittwoch im Monat ist.
http://msdn2.microsoft.com/en-us/library/system.dayofweek.aspx
Oder habe ich etwas wichtiges überlesen?
Du kannst aber zählen. Wenn heute Mittwoch der 24. ist, hatte ich schon am 17., am 10. und am 3. einen Mittwoch. Also ist heute der vierte Mittwoch im Monat.
EDIT:
Kurz gesagt: 24 / 7 = 3,6 > 3 => es gab drei Mittwoche vorher => heute ist der vierte.
Richitg, zählen sollte ich können. =)
Danke euch zwei für die flotte hilfe 👍 👍
So habe folgende Lösung anzubieten, falls jemand auch mal auf dem Schlauch stehen sollte ^^
string sDayToday = DateTime.Today.Day.ToString();
int iDayToday = Convert.ToInt32(sDayToday);
int iDayTodayResult = (iDayToday / 7) + 1;
if (iDayTodayResult >= 1 && iDayTodayResult < 2) { cbJaehrlichEZDVLWochentag.SelectedIndex = 0; }
if (iDayTodayResult >= 2 && iDayTodayResult < 3) { cbJaehrlichEZDVLWochentag.SelectedIndex = 1; }
if (iDayTodayResult >= 3 && iDayTodayResult < 4) { cbJaehrlichEZDVLWochentag.SelectedIndex = 2; }
if (iDayTodayResult >= 4 && iDayTodayResult < 5) { cbJaehrlichEZDVLWochentag.SelectedIndex = 3; }
if (iDayTodayResult >= 5 && iDayTodayResult < 6) { cbJaehrlichEZDVLWochentag.SelectedIndex = 4; }
cbJaehrlichEZDVLWochentag ist eine ComboBox mit folgendem Inhalt
Danke nochmal für den denkanstoß =)
Dier 4. kann aber auch der letzte sein 🤔
e.f.q.
Aus Falschem folgt Beliebiges
Richitg, das hat mein Test auch ergeben, aber da findet sich nach einem guten Mittagessen bestimmt eine Lösung. Oder hast du spontan eine Idee?
Wenn du das Datum gegeben hast und testen willst ob es der letzte jeweilige Wochentag ist, musst du nur 7 Tage draufrechnen und Testen, ob sich der Monat verändert hat.
e.f.q.
Aus Falschem folgt Beliebiges
Habs vorab so gelöst. (nicht getestet sollte aber laufen) entspricht ja in etwa deinem Lösungsvorschlag.
string sDayToday = DateTime.Today.Day.ToString();
string sMonthToday = DateTime.Today.Month.ToString();
string sYearToday = DateTime.Today.Year.ToString();
int iDaysInMonth = DateTime.DaysInMonth(Convert.ToInt32(sYearToday), Convert.ToInt32(sMonthToday));
int iDayToday = Convert.ToInt32(sDayToday);
int iLastWeekDay = iDaysInMonth - iDayToday;
int iDayTodayResult = (iDayToday / 7) + 1;
if (iDayTodayResult >= 1 && iDayTodayResult < 2) { cbJaehrlichEZDVLWochentag.SelectedIndex = 0; }
if (iDayTodayResult >= 2 && iDayTodayResult < 3) { cbJaehrlichEZDVLWochentag.SelectedIndex = 1; }
if (iDayTodayResult >= 3 && iDayTodayResult < 4) { cbJaehrlichEZDVLWochentag.SelectedIndex = 2; }
if (iDayTodayResult >= 4 && iDayTodayResult < 5)
{
if (iLastWeekDay < 7)
{
cbJaehrlichEZDVLWochentag.SelectedIndex = 4;
}
else
{
cbJaehrlichEZDVLWochentag.SelectedIndex = 3;
}
}
if (iDayTodayResult >= 5 && iDayTodayResult < 6) { cbJaehrlichEZDVLWochentag.SelectedIndex = 4; }
Danke für die freundliche Unterstützung 👍
anstatt
if (iLastWeekDay < 7)
{
cbJaehrlichEZDVLWochentag.SelectedIndex = 4;
}
else
{
cbJaehrlichEZDVLWochentag.SelectedIndex = 3;
}
kannst du auch
cbJaehrlichEZDVLWochentag.SelectedIndex = (iLastWeekDay < 7)?4:3;
nehmen
aber das ist nur ein optischer effekt... funktionell ändert sich absolut nichts.
ps: anstatt lauter if abfragen solltest du ab der ersten if prüfung mit else-if weitermachen da sonst jede einzelne bedingung geprüft wird, was bei größeren programmen einiges an performanceschwankungen verursachen kann.
Hallo JAck30lena,
naja, wenn es darum geht, Unsinn aus dem Code zu entfernen, bietet sich ja noch wesentlich mehr.
if (iDayTodayResult ≥ 1 && iDayTodayResult < 2) ist zum Beispiel schon eine heiße Konstruktion, um festzustellen, ob iDayTodayResult eins ist.
Und dann kann man die ersten drei ifs ja zusammenfassen zu
if (iDayTodayResult <= 3) {
cbJaehrlichEZDVLWochentag.SelectedIndex = iDayTodayResult;
}
und in der Art gibt es noch weitere Möglichkeiten.
herbivore
z.b.
string sDayToday = DateTime.Today.Day.ToString();
string sMonthToday = DateTime.Today.Month.ToString();
string sYearToday = DateTime.Today.Year.ToString();
int -> string
int iDaysInMonth = DateTime.DaysInMonth(Convert.ToInt32(sYearToday), Convert.ToInt32(sMonthToday));
int iDayToday = Convert.ToInt32(sDayToday);
string -> int
Da kann ich nicht wiedersprechen... der Quellcode ist nicht gerade das was man perfomant oder sauber nennt 🤔
Werde die Verbesserungsvorschläge umsetzten.
Danke & Gruß 👍