Autor Beitrag
rennmaus
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 17.04.18 09:10 
Hallo zusammen, ich möchte gerne eine Zeichenfolge aus einer Textbox in einen string einlesen und diesen dann in das Zeitformat "HH:mm" konvertieren. Ich komme einfach nicht auf eine Lösung, ich wäre Euch dankbar! Dabei stoße ich jedoch auf folgenden Fehler: Liegt es an den Trennzeichen?


"System.FormatException: "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."" //Zeile 34

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
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;
using System.Globalization;

namespace _2018_04_16_Arbeitszeitberechner
{
    public partial class Form1 : Form
    {

        string x = "";
        string y = "";

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string x = textBox1.Text; //Bsp.: "12:30"
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            string y = textBox2.Text; //Bsp.: "13:30"
        }

        
        void zeit_berechnen()
        {
            CultureInfo provider = new CultureInfo("de-DE");
            DateTime dienstbeginn = DateTime.ParseExact(x, "HH:mm", provider); //FEHLER
            DateTime dienstende = DateTime.ParseExact(y, "HH:mm", provider);
            //double zs = (dienstende - dienstbeginn).TotalHours;
            //textBox3.Text = zs.ToString("HH:mm");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            zeit_berechnen();
        }
    }
}
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.04.18 09:48 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 17.04.18 10:54 
Benutze auch einfach mal den Debugger - schau mal was in x und y drinsteht (dann siehst du den Fehler in den beiden TextChanged-Methoden)...

Besser wäre es sowieso, die beiden Werte als Parameter an die Methode zeit_berechnen zu übergeben, d.h. du brauchst dann die TextChanged-Methoden nicht mehr.

PS: "remove unused usings"
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.04.18 11:10 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 17.04.18 12:28 
Überlege auch mal was es bedeutet das du den Datentyp vor x und y in den TextChanged Methoden hingeschrieben hast.
rennmaus Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 17.04.18 13:23 
Ich melde mich zurück! :D

Dankeschön, dass ihr mich auf Unsinnigkeiten und Fehler aufmerksam gemacht habt.
Ich habe Eure Verbesserungsvorschläge (z.B.: den DateTimePicker) umgesetzt und nun eine funktionierende Lösung gefunden!

Gerne möchte ich Euch zuletzt nochmal den Code zeigen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public Form1()
        {
            InitializeComponent();
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            dateTimePicker1.CustomFormat = "HH:mm";
            dateTimePicker2.Format = DateTimePickerFormat.Custom;
            dateTimePicker2.CustomFormat = "HH:mm";
        }

                void zeit_berechnen()
        {
            DateTime dt_dienstbeginn = Convert.ToDateTime(dateTimePicker1.Value);
            DateTime dt_dienstende = Convert.ToDateTime(dateTimePicker2.Value);
            double arbeitszeit = (dt_dienstende - dt_dienstbeginn).TotalHours;
            double pflichtzeit = 7.8;
            double db_gleitzeitstatus = arbeitszeit - pflichtzeit;
            string gleitzeitstatus = Convert.ToString(db_gleitzeitstatus * 60);
            textBox1.Text = gleitzeitstatus;
        }
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 17.04.18 14:01 
Du brauchst die Konvertierungsmethode nicht, da DateTimerPicker.Value schon eine DateTime-Instanz zurückgibt.