Differenz zwischen zwei Daten (Datumen) ausrechnen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von LpThePlayer.

    Differenz zwischen zwei Daten (Datumen) ausrechnen

    Ich programmiere gerade ein Programm das eine Futterkurve für Kälber enthält, dass heißt das Programm soll die sagen wie viel Liter Milch oder Pulvermilch mit der richtigen Mischung das Kalb bekommt.
    Das Programm muss also wissen wann das Kalb geboren wurde und welches Datum heute ist. Mit diesen zwei Werten muss die Differenz ausgerechnet werden.

    Das Geburtsdatum wird in eine MaskedTextBox mit der Mask 0000/00/00.

    Der Code für die Rechnung:

    VB.NET-Quellcode

    1. Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick
    2. Dim heute As Date
    3. heute = Now
    4. TextBox81.Text = heute.ToShortDateString - MaskedTextBox16.Text
    5. End Sub


    Wenn ich in Visual Studio Debugge funktioniert alles einwandfrei, aber wenn ich es installiere oder die .exe ausführe
    Kommt diese Meldung:
    pic-upload.de/view-27323309/Screenshot--2-.png.html

    Auf Details kommt das:
    Spoiler anzeigen
    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.InvalidCastException: Ungültige Konvertierung von der Zeichenfolge . . in Typ Double. ---> System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
    --- Ende der internen Ausnahmestapelüberwachung ---
    bei Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
    bei CalfView.Form1.Timer4_Tick(Object sender, EventArgs e) in E:\CalfView\CalfView1\CalfView1\Form1.vb:Zeile 158.
    bei System.Windows.Forms.Timer.OnTick(EventArgs e)
    bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
    ----------------------------------------
    CalfView
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///E:/CalfView/CalfView1/CalfView1/obj/Release/CalfView.exe.
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly-Version: 10.0.0.0.
    Win32-Version: 12.0.20806.33440 built by: FX45W81RTMREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    ----------------------------------------
    System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Configuration
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
    ----------------------------------------
    System.Xml
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
    ----------------------------------------
    System.Runtime.Remoting
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.6.57.0 built by: NETFXREL2.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.36213 built by: FX452RTMLDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.34209 built by: FX452RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
    ----------------------------------------
    Microsoft.VisualBasic.resources
    Assembly-Version: 10.0.0.0.
    Win32-Version: 12.0.20806.33440 built by: FX45W81RTMREL.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic.resources/v4.0_10.0.0.0_de_b03f5f7f11d50a3a/Microsoft.VisualBasic.resources.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle Ausnahmefehler an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.


    Es erscheint nur die Meldung, wenn die Rechnung ausgeführt wird.


    Hoffe auf Hilfe.

    //Info: Hatte gerade Internet Probleme und darum hat es irgendwie nur die hälfte abgesendet. Jetzt sollten alle Infos dabei sein.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „LpThePlayer“ ()

    Mach erstmal Option Strict On, wie RushDen gesagt hat.
    Und Date - Date = TimeSpan. Bevor du das machen kannst, musst du aber erst den Text aus der TextBox in ein Date parsen.
    <p>

    nafets schrieb:

    Mach erstmal Option Strict On, wie RushDen gesagt hat.<br />
    Und Date - Date = TimeSpan. Bevor du das machen kannst, musst du aber erst den Text aus der TextBox in ein Date parsen.
    </p>



    Das mit Option Strict On hab ich hinbekommen, aber ich bekomm das anderen nicht hin... Steh grad voll auf den Schlauch :/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LpThePlayer“ ()

    Dein Problem liegt hier

    VB.NET-Quellcode

    1. heute.ToShortDateString - MaskedTextBox16.Text


    Du versuchst hier von einem Datum einen Text zu subtrahieren. Das funktioniert natürlich nicht. msdn.microsoft.com/de-de/library/1905yhe2(v=vs.110).aspx
    naja, ich sehe da sehr viele Probleme, vor allem fehlt Grundlagenwissen, etwa was ein Datentyp überhaupt ist, und warum man ein Datum nicht von einem String subtrahieren kann.

    Erschwerend kommt hinzu, dass auch der Deppen-Namespace noch importiert ist, also dringend empfohlen, den GeneralImport von Microsoft.VisualBasic zu deaktivieren: Visual Studio - Empfohlene Einstellungen
    @TE: sicher verstehst du nur Bahnhof, das soll dich aber nicht hindern, der Anleitung zu folgen.
    Glaub mir: Genannter Namespace torpediert durch unsaubere Tricks die Systematik des Frameworks, und erschwert dadurch enorm, den logischen Aufbau eines objektorientierten Programms zu erfassen, bzw. entsprechend programmieren zu lernen.

    Zu weiteren Grundlagen ein kleiner Einstieg: Grundlagen: Fachbegriffe

    Das gesamte Programm: Datenverarbeitungs-Vorraussetzungen
    Sone Kälber-Futterplanung wird letztlich nicht ohne das auskommen.

    LpThePlayer schrieb:

    Mit diesen zwei Werten muss die Differenz ausgerechnet werden.
    Um gleich das richtige Verständnis zu entwickeln:
    Was ist der Unterschied zwischen 12 Uhr und 12 Stunden?
    (Das ist eine sehr ernst gemeinte Frage.)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    LpThePlayer schrieb:

    Zeitraum
    Jou. Richtige Antwort.
    Jetzt musst Du Dir nur noch überlegen, wie mit Zeitpunkten und Zeiträumen gerechnet werden kann.
    Was ist zum Beispiel
    24.12.2014 PLUS 11.06.2015
    24.12.2014 MINUS 11.06.2015
    24.12.2014 PLUS 24 Stunden
    24.12.2014 MINUS 24 Stunden
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    gut, ein paar Vorraussetzungen hättenwa also, du kannst einen Zeitpunkt von einem Zeitraum unterscheiden. Die dafür vorgesehenen Datentypen heissen übrigens DateTime und TimeSpan (Zeit-Spanne).

    Nun musst du dir darüber klar werden, dass du Tabellen brauchst, und zwar mehrere:
    Du musst Kalb-Datensätze anlegen können mit allerlei Daten, und vlt. gibts auch verschiedene Futter-Sorten, und bei diesen Datensätzen muss auch iwie angegeben sein, für welche Art Kälber die zu füttern sind (nehme ich an).
    Also die in Post#1 angedeuteten Klassen (Textbox, DateTime, String, Timer) berühren dieses Problem nichtmal, dass du Tabellen brauchst, in denen du Datensätze anlegen kannst.
    Die schönste Rechnung mit DateTime und Timespan nützt dir nicht die Bohne, wenn du keinen Kalb-Datensatz hast, wo du mw. ein Geburtsdatum eintragen oder abrufen kannst.
    Aber in post#8 hab ich dir ja eiglich alles nötige an die Hand gegeben.

    ErfinderDesRades schrieb:

    gut, ein paar Vorraussetzungen hättenwa also, du kannst einen Zeitpunkt von einem Zeitraum unterscheiden. Die dafür vorgesehenen Datentypen heissen übrigens DateTime und TimeSpan (Zeit-Spanne).

    Nun musst du dir darüber klar werden, dass du Tabellen brauchst, und zwar mehrere:
    Du musst Kalb-Datensätze anlegen können mit allerlei Daten, und vlt. gibts auch verschiedene Futter-Sorten, und bei diesen Datensätzen muss auch iwie angegeben sein, für welche Art Kälber die zu füttern sind (nehme ich an).
    Also die in Post#1 angedeuteten Klassen (Textbox, DateTime, String, Timer) berühren dieses Problem nichtmal, dass du Tabellen brauchst, in denen du Datensätze anlegen kannst.
    Die schönste Rechnung mit DateTime und Timespan nützt dir nicht die Bohne, wenn du keinen Kalb-Datensatz hast, wo du mw. ein Geburtsdatum eintragen oder abrufen kannst.
    Aber in post#8 hab ich dir ja eiglich alles nötige an die Hand gegeben.


    Ich habe schon alles fertig. Ich muss jetzt nur die Futterkurve programmieren. Ich muss nur noch die Differenz, also den Zeitraum von "Heute" (Now) und dem eingegeben Geburtsdatum ausrechnen lassen. Das Geburtsdatum wird in eine Maskedtextbox eingegeben. Ich muss also die Eingabe der Maskedtextbox in ein Datum umwandeln.

    Und das weiß ich nicht wie und ich komme nicht drauf.

    LpThePlayer schrieb:

    Maskedtextbox
    Nimm einen DateTimePicker.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    LpThePlayer schrieb:

    Ich habe schon alles fertig. Ich muss jetzt nur die Futterkurve programmieren. Ich muss nur noch die Differenz, also den Zeitraum von "Heute" (Now) und dem eingegeben Geburtsdatum ausrechnen lassen.
    na denn:

    VB.NET-Quellcode

    1. Dim diff As TimeSpan = Date.Now - EingegebenesGeburtsDatum
    Problem solved, alles andere hast du ja bereits, sagst du :P
    Danke Leute.

    Das ist jetzt mein Code fürs ausrechen:

    Dim heute As Date
    heute = Now
    Dim gbdate As Date
    gbdate = DateTimePicker1.Value.Date
    Dim diff As TimeSpan = Date.Now.Subtract(gbdate)


    Wie kann man das jetzt in eine Textbox anzeigen lassen?
    Das funktioniert nicht: TextBox85.Text = diff
    Du musst es wieder in einen String konvertieren ;)

    Btw.: Was soll heute bezwecken? Und Deklaration und Zuweisung passen in eine Zeile :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Versuch es doch mal so:

    VB.NET-Quellcode

    1. Dim diff As TimeSpan = Date.Now.Subtract(DateTimePicker1.Value.Date)
    2. MessageBox.Show(diff.Days.ToString)

    diff.Days zeigt die Anzahl der Tage an.
    diff.tostring würde die gesamte Zeit anzeigen mit Tage.Stunden.Minuten.Sekunden
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."