Hallo zusammen ich stehe vor folgenden Problem:
Ich habe 1 Eingabefeld und ich möchte folgende Werte anhand der Eingabe in Feld 2 und 3 realisieren.
Ziel KW: Beispielsweise KW28
daraus möchte ich gerne wissen welches Datum der Vorwoche(KW27) der Mittwoch hat und dieses in Feld 2 ausgeben.
Und in Feld 3 möchte ich das Datum von der Ziel KW vom Dienstag ausgeben.
Beispiel anhand der Kalenderwoche 28
Ziel KW:28
Datum von: 06.07.2022 (Mittwoch der Ziel-VORWOCHE)
Datum bis: 12.07.2022 (Dienstag der Ziel-Woche)
Ziel KW [] (Feld1 textBox1)
Datum von [] (Feld2 textBox2)
Datum bis [_____________] (Feld3 textBox3)
[BUTTON BERECHNEN]
Die aktuelle Kalenderwoche habe ich wie folgt ausgerechnet. Das funktioniert soweit auch und er gibt mir die aktuelle Kalenderwoche aus.
Leider finde ich nur nicht heraus wie ich die oben genannte Berechnung herausbekomme.
private int KalenderWocheBerechnen()
{
CultureInfo cultureInfo = new CultureInfo("de-DE");
Calendar calender = cultureInfo.Calendar;
int currentWeek = calender.GetWeekOfYear(DateTime.Today, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
return currentWeek -1;
}
private void Form1_Load(object sender, EventArgs e)
{
var kw = Convert.ToString(KalenderWocheBerechnen());
label4.Text = "Aktuelle KW: " + kw;
}
private void button1_Click(object sender, EventArgs e)
{
}
Schau dir mal die Methode GetDateFromWeekNumberAndDayOfWeek
aus Get date from weeknumber an (das aktuelle Jahr solltest du dann noch als Parameter übergeben 😉.
Danke für deine Antwort!
Damit konnte ich tatsächlich mein Problem lösen.
Besten Dank. War ja doch nicht so kompliziert wie ich dachte 🙂
Ich habe es jetzt wie folgt gelöst:
static DateTime GetDateFromWeekNumberAndDayOfWeek(int weekNumber, int dayOfWeek)
{
DateTime jan1 = new DateTime(2022, 1, 1);
int daysOffset = DayOfWeek.Tuesday - jan1.DayOfWeek;
DateTime firstMonday = jan1.AddDays(daysOffset);
var cal = CultureInfo.CurrentCulture.Calendar;
int firstWeek = cal.GetWeekOfYear(jan1, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
var weekNum = weekNumber;
if (firstWeek <= 1)
{
weekNum -= 1;
}
var result = firstMonday.AddDays(weekNum * 7 + dayOfWeek - 1);
return result;
}
private void button1_Click(object sender, EventArgs e)
{
var eingabeKW = Convert.ToInt32(textBox1.Text);
var ausgabeVonMittwoch = Convert.ToString(GetDateFromWeekNumberAndDayOfWeek(eingabeKW, 2));
var ausgabeDienstag = Convert.ToString(GetDateFromWeekNumberAndDayOfWeek(eingabeKW + 1, 1));
textBox2.Text = ausgabeVonMittwoch;
textBox3.Text = ausgabeDienstag;
}
Eine Frage stellt sich mir jedoch noch:
Wie bekomme ich bei der Ausgabe nur das Datum ohne Uhrzeit. Im moment soeht die Ausgabe so aus: 01.01.2022 00:00:00 würde gerne die Nullen nicht angezeigt bekommen 🙂
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.