C# :: Aufgabe #50

8 Lösungen Lösungen öffentlich

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

Lösungen:

vote_ok
von haeusner (60 Punkte) - 25.09.2013 um 11:06 Uhr
Quellcode ausblenden C#-Code
            

            Console.Write("Bitte geben Sie den ersten Tag an: ");
            var firstDay = Console.ReadLine();

            Console.Write("Bitte geben Sie den zweiten Tag an: ");
            var secondDay = Console.ReadLine();

            Console.Write("Bitte geben Sie die Zeitdifferenz an, die ermittelt werden soll (1 = Tage, 2 = Monate, 3 = Jahre, 4 = Minuten, 5 = Stunden: ");
            var timeChoice = Console.ReadLine();

            var begin = DateTime.Parse(firstDay); // Hier wird bei falschem Format eine Exception geworfen
            var end = DateTime.Parse(secondDay); // Hier wird bei falschem Format eine Exception geworfen

            TimeSpan t;
            
            if (begin <= end)
                t = end - begin;
            else
                t = begin - end;

            switch (timeChoice)
            {
                case "1":
                    Console.WriteLine("Zwischen dem {0} und dem {1} sind {2} Tage.",
                                       firstDay,
                                       secondDay,
                                       t.TotalDays);
                    break;

                case "2":
                    {
                        int months = 0;
                        DateTime t1, t2;
                        if (begin < end)
                        {
                            t1 = begin;
                            t2 = end;
                        }
                        else
                        {
                            t2 = begin;
                            t1 = end;
                        }
                            
                        while ((t1.Month < t2.Month && t1.Year == t2.Year)
                             || t1.Year < t2.Year)
                        {
                            months++;

                            t1 = t1.AddMonths(1);
                        }
                        Console.WriteLine("Zwischen dem {0} und dem {1} sind {2}  Monate.",
                                           firstDay,
                                           secondDay,
                                           months);
                        break;
                    }
                case "3":
                    {
                        int years = 0;
                        DateTime t1, t2;
                        if (begin < end)
                        {
                            t1 = begin;
                            t2 = end;
                        }
                        else
                        {
                            t2 = begin;
                            t1 = end;
                        }

                        while (t1.Year < t2.Year)
                        {
                            years++;

                            t1 = t1.AddYears(1);
                        }

                        Console.WriteLine("Zwischen dem {0} und dem {1} sind {2} Jahre.",
                                           firstDay,
                                           secondDay,
                                           years);
                        break;
                    }
                case "4":
                    Console.WriteLine("Zwischen dem {0} und dem {1} sind {2} Minuten.",
                                       firstDay,
                                       secondDay,
                                       t.TotalMinutes);
                    break;

                case "5":
                    Console.WriteLine("Zwischen dem {0} und dem {1} sind {2} Stunden.",
                                       firstDay,
                                       secondDay,
                                       t.TotalHours);
                    break;

                default:

                    throw new ArgumentOutOfRangeException();
            }

            Console.ReadKey();

vote_ok
von wladi-g (1310 Punkte) - 23.06.2014 um 14:01 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Windows.Forms;

namespace Zeitdifferenz
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            zeitformen.Items.Add("Tage");
            zeitformen.Items.Add("Monate");
            zeitformen.Items.Add("Jahre");
            zeitformen.Items.Add("Stunden");
            zeitformen.Items.Add("Minuten");
            zeitformen.SelectedItem = "Tage";
            
        }

        private void zeitformen_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (zeitformen.SelectedItem.ToString() == "Stunden" || zeitformen.SelectedItem.ToString() == "Minuten")
            {
                datumVon.Format = DateTimePickerFormat.Time;
                datumBis.Format = DateTimePickerFormat.Time;
            }
            else
            {
                datumVon.Format = DateTimePickerFormat.Long;
                datumBis.Format = DateTimePickerFormat.Long;
            }
        }

        private void berechnen_Click(object sender, EventArgs e)
        {
            if (datumVon.Value.CompareTo(datumBis.Value) <= 0)
                switch (zeitformen.SelectedItem.ToString())
                {
                    case "Tage":
                        differenz.Text = Convert.ToInt32(datumBis.Value.Subtract(datumVon.Value).TotalDays).ToString();
                        break;
                    case "Monate":
                        int month = 0;
                        DateTime temp = datumVon.Value;
                        while (temp.CompareTo(datumBis.Value) < 0)
                        {
                            month++;
                            temp = temp.AddMonths(1);
                        }
                        if (month != 0)
                            month--;
                        differenz.Text = month.ToString();
                        break;
                    case "Jahre":
                        differenz.Text = (datumBis.Value.Year - datumVon.Value.Year).ToString();
                        break;
                    case "Stunden":
                        differenz.Text = Convert.ToInt32(datumBis.Value.Subtract(datumVon.Value).TotalHours).ToString();
                        break;
                    case "Minuten":
                        differenz.Text = Convert.ToInt32(datumBis.Value.Subtract(datumVon.Value).TotalMinutes).ToString();
                        break;
                    default:
                        MessageBox.Show("Keine gültige Zeitform gewählt");
                        break;
                }
            else
                MessageBox.Show("Von Datum liegt nach Bis Datum.");
        }

        private void abbrechen_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }
    }
}
vote_ok
von Gisbert5020 (3120 Punkte) - 05.10.2014 um 17:40 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zeitdifferenz
{
  class Program
  {
    
    static void Main()
    {
      Console.WriteLine("Geben Sie das niedrigere Datum ein in dd.mm.yyyy hh:MM ein:");
      DateTime datum1 = DateTime.Parse(Console.ReadLine());
      Console.WriteLine("Geben Sie das höhre Datum ein:");
      DateTime datum2 = DateTime.Parse(Console.ReadLine());
      int jahre = datum2.Year - datum1.Year;
      DateTime datum = datum1.AddYears(jahre);
      if (datum > datum2)
      {
        jahre--;
        datum = datum1.AddYears(jahre);
      }
      int monate = datum2.Month - datum1.Month;
      if (datum2.Day < datum1.Day) monate--;
      monate = (monate + 12) % 12;
      datum = datum.AddMonths(monate);
      int tage = (datum2 - datum).Days;
      int stunden = (datum2 - datum).Hours;
      int minuten = (datum2 - datum).Minutes;
      TimeSpan diff = datum2 - datum1;
      Console.WriteLine("Die Zeitdifferenz ist {0} Jahre, {1} Monate, {2} Tage, {3} Stunden, {4} Minuten",
              jahre.ToString(), monate.ToString(), tage.ToString(),stunden.ToString(),minuten.ToString());
      Console.WriteLine("in Jahre: {0}", jahre);
      Console.WriteLine("in Monate: {0}", jahre * 12 + monate);
      Console.WriteLine("in Tage: {0}", diff.TotalDays);
      Console.WriteLine("in Stunden: {0}", diff.TotalHours);
      Console.WriteLine("in Minuten: {0}", diff.TotalMinutes);
      Console.ReadLine();
    }
  }
}
vote_ok
von n.rohde (400 Punkte) - 20.08.2015 um 13:35 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ZeitZwischenZweiTagen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int anzahlJahre, jahr_1, jahr_2, anzahlMonate=0, monat_1, monat_2, tage, stunden, minuten;

            monat_1 = dateTimePicker5.Value.Month;
            monat_2 = dateTimePicker6.Value.Month;
            jahr_1 = dateTimePicker5.Value.Year;
            jahr_2 = dateTimePicker6.Value.Year;

            if (dateTimePicker5.Value.Date < dateTimePicker6.Value.Date)
            {
                while (monat_1 != monat_2 || jahr_1 != jahr_2)
                {
                    if (monat_1 == 12)  // Ein nächstes Jahr wird erreicht
                    {                   // Dezember zu 
                        monat_1 = 0;    // Januar
                        jahr_1++;
                    }
                    anzahlMonate++;
                    monat_1++;
                }
                anzahlJahre = anzahlMonate / 12;    // Bsp.: 8.8.15 - 8.1.16 -> Kein komplettes Jahr dazwischen

                tage = Convert.ToInt32(dateTimePicker6.Value.Date.Subtract(dateTimePicker5.Value.Date).TotalDays);
                stunden = Convert.ToInt32(dateTimePicker6.Value.Date.Subtract(dateTimePicker5.Value.Date).TotalHours);
                minuten = Convert.ToInt32(dateTimePicker6.Value.Date.Subtract(dateTimePicker5.Value.Date).TotalMinutes);
            }
            else
            {
                while (monat_1 != monat_2 || jahr_1 != jahr_2)
                {
                    if (monat_2 == 12)
                    {
                        monat_2 = 0;
                        jahr_2++;
                    }
                    anzahlMonate++;
                    monat_2++;
                }
                anzahlJahre = anzahlMonate / 12;

                tage = Convert.ToInt32(dateTimePicker5.Value.Date.Subtract(dateTimePicker6.Value.Date).TotalDays);
                stunden = Convert.ToInt32(dateTimePicker5.Value.Date.Subtract(dateTimePicker6.Value.Date).TotalHours);
                minuten = Convert.ToInt32(dateTimePicker5.Value.Date.Subtract(dateTimePicker6.Value.Date).TotalMinutes);
            }
     
            label2.Text = "Jahre: " + Convert.ToString(anzahlJahre);
            label3.Text = "Monate: " + Convert.ToString(anzahlMonate);
            label4.Text = "Tage: " + Convert.ToString(tage);
            label5.Text = "Stunden: " + Convert.ToString(stunden);
            label6.Text = "Minuten: " + Convert.ToString(minuten);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label2.Text = "Jahre:";
            label3.Text = "Monate:";
            label4.Text = "Tage:";
            label5.Text = "Stunden:";
            label6.Text = "Minuten:";
        }
    }
}
vote_ok
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 :)

Quellcode ausblenden 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;
        }
    }
}
vote_ok
von kjaenke (1140 Punkte) - 04.01.2018 um 10:53 Uhr
Quellcode ausblenden C#-Code
namespace Exercise_50
{
    using System;

    internal static class Program
    {
        private static void Main()
        {
            Console.Write("Erster Tag: ");
            var firstDay = DateTime.Parse(Console.ReadLine());
            Console.Write("Zweiter Tag: ");
            var secondDay = DateTime.Parse(Console.ReadLine());

            Console.WriteLine(secondDay - firstDay);
            Console.Read();
        }
    }
}
vote_ok
von kjaenke (1140 Punkte) - 04.01.2018 um 12:13 Uhr
Quellcode ausblenden C#-Code
namespace Exercise_50
{
    using System;

    internal static class Program
    {
        private static void Main()
        {
            Console.Write("Erster Tag: ");
            var firstDay = DateTime.Parse(Console.ReadLine());
            Console.Write("Zweiter Tag: ");
            var secondDay = DateTime.Parse(Console.ReadLine());

            Console.WriteLine(secondDay - firstDay);
            Console.Read();
        }
    }
}
vote_ok
von stcalvin (970 Punkte) - 15.02.2018 um 09:37 Uhr
Quellcode ausblenden C#-Code
        static void Aufgabe_50()
        {
            DateTime startdatum = new DateTime();
            DateTime enddatum = new DateTime();


            Console.Write("Startdatum(DD/MM/YYYY):      ");
            startdatum = Convert.ToDateTime(Console.ReadLine());
            Console.Write("Enddatum:(DD/MM/YYYY)        ");
            enddatum = Convert.ToDateTime(Console.ReadLine());

            TimeSpan differenz = new TimeSpan(enddatum.Ticks - startdatum.Ticks);

            Console.WriteLine("{0} Tag(e)", differenz.TotalDays);
            Console.WriteLine("{0} Stunden", differenz.TotalHours);
            Console.WriteLine("{0} Minuten", differenz.TotalMinutes);
            Console.WriteLine("{0} Sekunden", differenz.TotalSeconds);
        }