DateTimePicker

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    DateTimePicker

    Hallo,

    heute stehe ich mal wieder vor einem Problem, wo ich ned schlau werde.

    Vielleicht kann mit einer helfen, oder erklären... was das für ein "Gedöns" ist:

    Habe zwei DateTimePicker auf Zeit mit Costum-Forma: "HH:mm" über Designer auf Form.

    Eingegeben wird z. B. 08:00 und 24:00 Uhr

    Das 24 Uhr nimmt er nicht an und wir müssen immer 23:59 angeben... was für ein Mist.

    Geben wir 0:00 an, nimmt er es zwar an, aber dann funktioniert meine "Zeitrechnung" nicht mehr...

    Mein Test-Code:

    VB.NET-Quellcode

    1. Dim _t1 As New TimeSpan(DateTime.Parse(BelegReiseziel_VONDateTimePicker.Value).TimeOfDay.Ticks)
    2. Dim _t2 As New TimeSpan(DateTime.Parse(BelegReiseziel_BISDateTimePicker.Value).TimeOfDay.Ticks)
    3. Dim _eT As String = _t2.Subtract(_t1).ToString
    4. Dim _eTzahl As Double = convertTimeSpanToDouble(_eT)
    5. lbl_reisedauer.Text = _eTzahl & " Std."


    Wie löst Ihr das Problem ??

    Gruß Michl

    EDIT:
    zum Test mal versucht mit MakTextBox zu arbeiten ... aber des war kei g'scheide Idee, weil's immer noch ned funktioniert.
    Letztends wird wohl am DateTime/Berechnung liegen.

    Hab aber keine Idee wie i des anders machen könnt.

    Der Text-Stümper-Code: :)

    VB.NET-Quellcode

    1. Dim _t1 As DateTime
    2. Dim _t2 As DateTime
    3. Try
    4. _t1 = DateTime.Parse(Now.ToString("dd/MM/yyyy ") & BelegReiseziel_VONMaskedTextBox.Text)
    5. _t2 = DateTime.Parse(Now.ToString("dd/MM/yyyy ") & BelegReiseziel_BISMaskedTextBox.Text)
    6. Catch ex As Exception
    7. MsgBox(ex.message)
    8. Exit Sub
    9. End Try
    10. Dim _eT As String = _t2.Subtract(_t1).ToString
    11. Dim _eTzahl As Double = convertTimeSpanToDouble(_eT)
    12. lbl_reisedauer.Text = _eTzahl & " Std."

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „michl75“ ()

    Wenn Du Option Strict On und Option Infer On machst, kannst Du vereinfachen (und das, obwohl es zum Anfang von Option Strict On meist komplizierter wird, aber bloß nicht abschrecken lassen). Wenn Du weißt, dass Du auf die Intelligenz Deiner User vertrauen kannst (tu es nicht!) und sie sinnvolle Werte in die DateTimePicker eingeben, kannst Du die Zeitspanne als Betrag (Math.Abs()) angeben -> immer positive Werte kommen als Ergebnis raus. Ob Du allerdings TotalHours oder nur Hours angibst, musst Du selber wissen.
    Aber: Kann das Reiseziel nicht auch an einem anderen Tag erreicht werden? Oder was ist, wenn die Reise länger als 24 Stunden dauert? Eine Datumseingabe wäre ggf. doch sinnvoll.

    VB.NET-Quellcode

    1. Dim _t1 = BelegReiseziel_VONDateTimePicker.Value.TimeOfDay.Ticks
    2. Dim _t2 = BelegReiseziel_BISDateTimePicker.Value.TimeOfDay.Ticks
    3. Dim _eT As New TimeSpan(_t1 - _t2)
    4. Dim _eTzahl = Math.Abs(_eT.TotalHours)
    5. lbl_reisedauer.Text = _eTzahl & " Std."

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn man die Datentypen DateTime und Timespan bischen kennt - also sie mal im Objectbrowser (@TE: folge dem Link!) anguckt, kann man stark vereinfachen, indem man sie sich zunutze macht:

    VB.NET-Quellcode

    1. dim zeitDiff = BelegReiseziel_BISDateTimePicker.Value - BelegReiseziel_VONDateTimePicker.Value
    2. lbl_reisedauer.Text = zeitDiff.Totalhours & " Std."

    Das 24 Uhr nimmt er nicht an und wir müssen immer 23:59 angeben... was für ein Mist.

    Geben wir 0:00 an, nimmt er es zwar an, aber dann funktioniert meine "Zeitrechnung" nicht mehr...


    Ja, richtig. Denn 24:00 Uhr gibt es nicht. Denn nach 23:59:59 Uhr kommt 00:00:00 Uhr. Weil da geht es ja von Vorne los ;)

    Ich Täte dir empfehlen, wie der nette Kollege oben bereits geschrieben hat, mit TimeSpan zu arbeiten. Evtl. zusätzlich ein Datum rein nehmen, weil das könnte ja auch mal Tagesübergreifend laufen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    michl75 schrieb:

    Habe zwei DateTimePicker auf Zeit mit Costum-Format: "HH:mm" über Designer auf Form.
    Auch wenn die DTP das Datum nicht anzeigen, so wird es doch intern verwaltet.
    Und wenn der von 23:59:59 auf 00:00:00 springt, ist das Datum auf den nächsten Tag gewechselt.
    Wenn Du das berücksichtigst, sollte da nix schief gehen.
    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!