C# :: Aufgabe #50 :: Lösung #5
8 Lösungen

#50
Zeit zwischen zweier Tage
Anfänger - C#
von Dome
- 10.03.2013 um 23:50 Uhr
Erstellen Sie ein Programm, mit dem man die Zeitdifferenz zwischen zwei Tagen bestimmen kann. Hierzu muss man beide Tage eingeben und das Programm gibt die Zeitdifferenz aus.
Je nach Schwierigkeitsgrad:
Eingabe der Daten per Konsole oder GUI, eine Art Dropdown-Menü oder ähnliches
Ausgabe der Differenz in mehreren "Zeitformen", Tage, Monate, Jahre, Minuten, Stunden
Eingabe von Uhrzeiten, die jeweils in die Berechnung einfließen
Je nach Schwierigkeitsgrad:
Eingabe der Daten per Konsole oder GUI, eine Art Dropdown-Menü oder ähnliches
Ausgabe der Differenz in mehreren "Zeitformen", Tage, Monate, Jahre, Minuten, Stunden
Eingabe von Uhrzeiten, die jeweils in die Berechnung einfließen
#5

von Robi (390 Punkte)
- 27.11.2015 um 10:37 Uhr
Eine Windows Forms-Lösung mit DateTimePickern und TextBoxen für die Uhrzeit: Anzeige in Tagen, Monaten, Jahren, Stunden, Minuten, Sekunden und Millisekunden :)
C#-Code

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Übungen_Zu_CSharp_50 { /// <summary> /// Ich habe hier mit DateTimePickern (mC_left und mC_right) für das Datum /// und TextBoxen für die Uhrzeit gearbeitet. /// Anstelle von meinen return-Anweisungen bei der Berechnung könnte man auch Message-Boxen mit den Fehlern aufploppen lassen. /// </summary> public partial class Form1 : Form { DateTime date1 = new DateTime(); DateTime date2 = new DateTime(); string ausgabe = ""; public Form1() { InitializeComponent(); //Es kann nur ein Datum ausgewählt werden pro DateTimePicker mC_left.MaxSelectionCount = 1; mC_right.MaxSelectionCount = 1; } //Einlesen des von-Datums und dieses im Label anzeigen private void mC_left_DateSelected(object sender, DateRangeEventArgs e) { date1 = mC_left.SelectionRange.Start; mC_left.Visible = false; lbl_date1.Text = date1.ToString(@"d\.MM\.yyyy"); } //Einlesen des bis-Datums und dieses im Label anzeigen private void mC_right_DateSelected(object sender, DateRangeEventArgs e) { date2 = mC_right.SelectionRange.Start; mC_right.Visible = false; lbl_date2.Text = date2.ToString(@"d\.MM\.yyyy"); } //Anzeigen der DateTimePicker zum Platzsparen private void lbl_date1_Click(object sender, EventArgs e) { if (mC_left.Visible == false) { mC_left.Visible = true; } else { mC_left.Visible = false; } } private void lbl_date2_Click(object sender, EventArgs e) { if (mC_right.Visible == false) { mC_right.Visible = true; } else { mC_right.Visible = false; } } //Berechnen der Differenz private void btn_berechnen_Click(object sender, EventArgs e) { ausgabe = ""; TimeSpan zeit1Time; TimeSpan zeit2Time; TimeSpan zeitDiff = new TimeSpan(0, 0, 0); TimeSpan dateDiff = date2.Subtract(date1); //Wenn das von-Datum nach dem bis-Datum liegt -> return if (dateDiff < new TimeSpan(0, 0, 0, -1)) return; //Konvertierung vom TextBox Inhalt in TimeSpan string[] zeit1 = txtBox_date1.Text.Split(':'); string[] zeit2 = txtBox_date2.Text.Split(':'); //return wenn falsches Format if (zeit1.Length < 3 || zeit1.Length > 3 || zeit2.Length < 3 || zeit2.Length > 3) return; //Wenn Standardinhalt ist die Zeitdifferenz 0 if(txtBox_date1.Text == "hh:mm:ss" || txtBox_date2.Text == "hh:mm:ss") { zeit1Time = new TimeSpan(0, 0, 0); zeit2Time = new TimeSpan(0, 0, 0); } else { try { zeit1Time = new TimeSpan(Convert.ToInt32(zeit1[0]), Convert.ToInt32(zeit1[1]), Convert.ToInt32(zeit1[2])); zeit2Time = new TimeSpan(Convert.ToInt32(zeit2[0]), Convert.ToInt32(zeit2[1]), Convert.ToInt32(zeit2[2])); //Return wenn Zeitangabe keinen Sinn macht if (Convert.ToInt32(zeit1[0]) > 24 || Convert.ToInt32(zeit2[0]) > 24 || Convert.ToInt32(zeit1[1]) > 60 || Convert.ToInt32(zeit2[1]) > 60 || Convert.ToInt32(zeit1[2]) > 60 || Convert.ToInt32(zeit2[2]) > 60 || Convert.ToInt32(zeit1[0]) < 0 || Convert.ToInt32(zeit2[0]) < 0 || Convert.ToInt32(zeit1[1]) < 0 || Convert.ToInt32(zeit2[1]) < 0 || Convert.ToInt32(zeit1[2]) < 0 || Convert.ToInt32(zeit2[2]) < 0) return; //Wenn die die von-Zeit "hinter" der bis-Zeit liegt if (zeit2Time.Ticks < zeit1Time.Ticks) { //Einen Tag abziehen und eine neue Zeitdifferenz ausrechnen dateDiff = dateDiff - new TimeSpan(1, 0, 0, 0); zeitDiff = new TimeSpan(24, 0, 0) - (zeit1Time - zeit2Time); } else { zeitDiff = zeit2Time - zeit1Time; } } catch (Exception ex) { Debug.WriteLine(ex.Message); //Zeitdifferenz ist 0, wenn etwas anderes angegeben wird, als eine Zeit zeitDiff = new TimeSpan(0, 0, 0); } } //Ausgabe dateDiff = dateDiff + zeitDiff; ausgabe += "Tage: " + dateDiff.TotalDays.ToString() + "\n"; ausgabe += "Monate: " + (dateDiff.TotalDays / 30).ToString()+ "\n"; ausgabe += "Jahre: " + (dateDiff.TotalDays / 365).ToString() + "\n"; ausgabe += "Stunden: " + dateDiff.TotalHours.ToString() + "\n"; ausgabe += "Minuten: " + dateDiff.TotalMinutes.ToString() + "\n"; ausgabe += "Sekunden: " + dateDiff.TotalSeconds.ToString() + "\n"; ausgabe += "Millisekunden: " + dateDiff.TotalMilliseconds.ToString(); lbl_differenz.Text = ausgabe; lbl_differenz.Visible = true; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1