C# :: Aufgabe #53
7 Lösungen

Bei Addition von Tage nur Werktage beachten
Anfänger - C#
von Gustl
- 22.07.2013 um 11:04 Uhr
Schreibe ein Programm welches die Anzahl der addierenden Tage abfrägt und dann das Datum ausgibt.
Bei der Addition der Tage sollen aber nur die Werktage (Geschäftstage): Montag, Dienstag, Mittwoch, Donnerstag und Freitag beachtet werden.
Beispiel: Heute ist der 22.07. (Montag), wenn ich nun 7 Tage eingebe soll der 31.07. (Mittwoch) ausgegeben werden.
Bei der Addition der Tage sollen aber nur die Werktage (Geschäftstage): Montag, Dienstag, Mittwoch, Donnerstag und Freitag beachtet werden.
Beispiel: Heute ist der 22.07. (Montag), wenn ich nun 7 Tage eingebe soll der 31.07. (Mittwoch) ausgegeben werden.
Lösungen:
Eine einfache Lösung
C#-Code

void Main() { // Anzahl der Geschäftstage einlesen int workdays = 0; string input = string.Empty; do { System.Console.WriteLine("Anzahl der Werktage ab heute: "); input = Console.ReadLine(); } while (!int.TryParse(input, out workdays)); // Einzeln jeden Tag weiterzählen und zusätzlich Wochenenden überspringen DateTime endday = DateTime.Today; for (int i = 0; i < workdays; i++) { endday = endday.AddDays(1); while (endday.DayOfWeek == DayOfWeek.Sunday || endday.DayOfWeek == DayOfWeek.Saturday) { endday = endday.AddDays(1); } } System.Console.WriteLine("Enddatum ist der " + endday.ToLongDateString()); }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AddDays { class Program { static void Main(string[] args) { DateTime dteingabe = DateTime.Now; Console.WriteLine("Geben Sie die Anzahl der zu addierenden Tage ein "); int anzahl = 0; while (!(Int32.TryParse(Console.ReadLine(), out anzahl))) { Console.WriteLine("Sie müssen eine Ganzzahl eingeben"); } for (int i = 0; i < anzahl; i++) { dteingabe = dteingabe.AddDays(1); if (dteingabe.DayOfWeek == DayOfWeek.Saturday || dteingabe.DayOfWeek == DayOfWeek.Sunday) i--; } Console.WriteLine("Das Enddatum (ohne Wochenende gerechnet) ist der {0} ({1})", dteingabe.Date.ToShortDateString(), dteingabe.DayOfWeek); Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.IO; namespace WerktageAddition { internal class Program { private static void Main(string[] args) { int tage = 0; DateTime now = DateTime.Now; string zeile = ""; string path = @"C:\kalender.txt"; List<DateTime> feiertage = new List<DateTime>(); if (File.Exists(path)) { StreamReader reader = new StreamReader(path); while (!reader.EndOfStream) { zeile = reader.ReadLine(); zeile = zeile.Remove(0, zeile.IndexOf(",") + 2); feiertage.Add(Convert.ToDateTime(zeile)); } } do { Console.Write("Bitte geben Sie die Anzahl der zu addierenden Tage ein: "); } while (!int.TryParse(Console.ReadLine(), out tage)); for (int i = 0; i < tage; i++) { now = now.AddDays(1); while (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday || feiertage.Contains(now.Date)) now = now.AddDays(1); } Console.WriteLine(now); } } }

using System; namespace Werktageberechnen { class Rechner { public static void Rechnen(int tage) { var dateTime = DateTime.Today; for (var i = 0; i < tage; i++) { dateTime = dateTime.AddDays(1); if (dateTime.DayOfWeek == DayOfWeek.Saturday || dateTime.DayOfWeek == DayOfWeek.Sunday) dateTime=dateTime.AddDays(2); } Console.WriteLine(dateTime); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TrainYourProgrammer53 { class Program { static void Main(string[] args) { int zaehler = 1; Console.WriteLine("Wie viele Tage sollen auf den heutigen addiert werden?"); string eingabe = Console.ReadLine(); TimeSpan tage = TimeSpan.Parse(eingabe); DateTime heute = DateTime.Today; DateTime ausgabe = DateTime.Today; TimeSpan tag = new TimeSpan(1, 0, 0, 0); while (zaehler <= Convert.ToInt32(eingabe)) { ausgabe = ausgabe.Add(tag); if (Convert.ToString(ausgabe.DayOfWeek) == "Saturday") { ausgabe = ausgabe.Add(tag); ausgabe = ausgabe.Add(tag); } zaehler++; } Console.WriteLine("{0:dddd}", ausgabe); Console.ReadKey(); } } }

static void Aufgabe_52() { DateTime jetzt = DateTime.Now; DateTime dann = new DateTime(); Console.Write("Wie viele Tage wollen Sie arbeiten? "); var tage = Convert.ToInt32(Console.ReadLine()); while (tage > 0) { if (jetzt.DayOfWeek != DayOfWeek.Saturday && jetzt.DayOfWeek != DayOfWeek.Sunday) { jetzt = jetzt.AddDays(1); tage--; } else { jetzt = jetzt.AddDays(1); } } Console.WriteLine(jetzt.ToString("dd.MM.yyyy")); }
NET 5.x; C# 9.x; VS-2019
C#-Code

using System; var start = new DateTime(2013, 7, 22); var days = 7; while(days != 0) { if (start.DayOfWeek is not DayOfWeek.Saturday and not DayOfWeek.Sunday) days--; start = start.AddDays(1); } Console.WriteLine(start.ToShortDateString());