Uhrzeit - Uhrzeit

  • VB.NET

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

    Uhrzeit - Uhrzeit

    Hallo,

    ich komme nicht weiter!

    Ich mache gerade einen Tool zum Herunterfahren des PC´s und bin beim "Uhrzeit - Uhrzeit" stehengeblieben.

    Situation:

    Ich habe
    Eine Textbox
    Ein Label
    Ein Button

    Wenn man in Textbox eingibt zB. 18:00 meint man damit das der PC um 18:00 herunterfahren muss.
    Und in Label leuft aktuelle Zeit.

    Mal angenohmen Textbox = 18:00 und Label = 12:00 also aktuele Zeit:
    Beim Drücken des Buttons passiert das:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. TextBox - Label = Zahl'in dem Fall 6
    3. Shell("shutdown -s " & Zahl * 60 * 60) 'damit sind wir bei 21600 Sekunden - Somit fährt der PC in 6 Stunden herunter
    4. End Sub


    So weit so gut!

    Aber ich Kriege die Zeit nicht subtrahiert!
    Und damit hier kann ich nichts anfangen: Subtraction(DateTime, TimeSpan)

    Bitte um Hilfe. Wenn jeman bescheid weiss wie ich hier verfahren muss, bitte um Vorschläge.

    MfG

    F.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Fluvoxamin“ ()

    Option Strict auf On schallten !

    Und es ist doch simple wenn das dein Code ist...
    Du schreibst Texbox - Label, jedoch gehört
    Texbox.text - label.text.

    Desweiteren, wie willst du bitte 18:00 mit 15:00 subtrahieren?
    Wandle die Zahlen in Minuten um sodass der doppelpunkt weg ist, und dann kannst subtrahieren.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Vielleicht ein paar Drundlagen:
    Datum + Datum => Tinnef - nicht definiert (was sollte 21.7.2012 + 24.12.2012 sein) :?:
    Datum - Datum = Zeitspanne (Dauer) - sehr wohl definiert.
    Umgesetzt in .NET:
    DateTime - DateTime = TimeSpan.
    Die Umkehrung:
    DateTime +- TimeSpan = DateTime.
    Und das gute an diesen Strukturen ist, man kann siue vergleichen:

    VB.NET-Quellcode

    1. If DateTime1 >= DateTime2 Then
    2. ' etwas tun
    3. End If
    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!

    Memo schrieb:

    Gibt es nicht DateTime.Substract?
    Klar, aber TimeSpan als argument.
    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!
    Tja Jungs ich komme einfach nicht weiter......

    So siehts aus gibt zwar Zeit aus aber nur die Aktuelle und substahiert es nicht. Ich mach was falsch aber was???

    VB.NET-Quellcode

    1. Dim eingabZeit As New TimeSpan()
    2. Dim aktueleZeit As Date = TimeOfDay
    3. 'If Not IsNumeric(zeitAngabeVerzögert.Text) Then
    4. ' MessageBox.Show(anzeigeFehler, fehler, MessageBoxButtons.OK, MessageBoxIcon.Error)
    5. If TextBox1.Text <= Label1.Text Then
    6. MessageBox.Show("fehlerText", "fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    7. Else
    8. aktueleZeit.Subtract(New TimeSpan()).ToLongTimeString()
    9. MessageBox.Show(aktueleZeit, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    10. End If


    MfG

    F.
    Hi,

    also ich will erreichen, dass bei Eigebe der Zeit in TextBox1 wird es mit dem Label1 verglichen(den da leuft aktuelle Zeit) und wenn da gleiche Zeit oder vergangene Zeit angegeben wird, bekommt
    der User Fehlermeldung.
    Aber wenn der User spätere Zeit eingibt also zB. aktuelle Zeit ist 12:00 und der User gibt 18:00 ein muss dann TextBox1(18:00) substahiert Label1(12:00), dann bekommt man "Zahl 6", das wird dann in Sekunden gewandelt und an Shell Befehl weitergegeben. Shell(shutdown -s " & Zahl 6) somit fähr der PC in 6 Stunden herunter.

    Bitte nicht auf die Schreibweise achten sind nur Beispiele.

    MfG

    F.
    Du solltest anfangen richtig zu denken.
    1. Du kannst nicht zwei Texte vergleichen, das macht keinen Sinn If TextBox1.Text <= Label1.Text
    --> Du musst die UserEingaben in Varibalen zwischen speichern und schauen, ob sie im richtigen Format vorliegen und dann in den richtigen Datentyp(DateTime) parsen
    2. Diese kann man dann auch (sinnvoll) vergleichen und voneinander subtrahieren, ABER da kommt keine Zahl raus sondern eine TIMESPAN
    Das denken in den richtigen Datentypen solltest du dir unbedingt angewöhnen
    3. Zur einfacheren Eingabe im richtigen Format solltest du dir mal das Control MaskedTextBox anschauen

    Fluvoxamin schrieb:

    VB.NET-Quellcode

    1. If TextBox1.Text <= Label1.Text Then
    Dieser Vergleich macht eine alphabetische Sortierung.
    Wenn Du Datums/Zeiten vergleichen willst, musst Du die Strings in DateTime-Objekte konvertieren.
    Nutze dazu, wenn gesichert ist, dass das Format stimmt:

    VB.NET-Quellcode

    1. Dim dt As DateTime = DateTime.Parse(DEIN_STRING)
    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!
    schau dir mal das Beispiel hier an... da steckt noch viel Potential drin... aber so als Anstoss

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    2. Me.MaskedTextBox1.ValidatingType = GetType(System.DateTime)
    3. Me.ToolTip1.IsBalloon = True
    4. End Sub
    5. Private Sub MaskedTextBox1_TypeValidationCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.TypeValidationEventArgs) Handles MaskedTextBox1.TypeValidationCompleted
    6. If Not e.IsValidInput Then
    7. Me.ToolTip1.ToolTipTitle = "Falsches Datumsformat"
    8. Me.ToolTip1.Show("Die Eingabe muss im Format hh:mm erfolgen", Me.MaskedTextBox1, Me.MaskedTextBox1.Width \ 2, -55, 5000)
    9. Else
    10. Dim eingabeDatum As DateTime = CDate(e.ReturnValue)
    11. Dim aktuelleZeit As DateTime = DateTime.Now
    12. If eingabeDatum > DateTime.Now Then
    13. Label1.Text = eingabeDatum.Subtract(aktuelleZeit).ToString("hh\:mm")
    14. End If
    15. End If
    16. End Sub

    FloFuchs schrieb:

    VB.NET-Quellcode

    1. Label1.Text = eingabeDatum.Subtract(aktuelleZeit).ToString("hh\:mm")
    Wenn dreist diese Zeile syntaktisch korrekt ist, so widerstrebt mir die Vermischung von Daten und GUI in einer Zeile.
    Ich würde das Zieldatum separat ausrechnen und dann das Ergebnis in einen String konvertieren. Das lässt sich im Debug auch besser verfolgen.
    Vielleicht ist da noch .ToShortTimeString angesagt.
    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!
    Ja, du hast ja Recht.. ich sprach deshalb ja auch von Potential :whistling: :whistling:

    RodFromGermany schrieb:

    Vielleicht ist da noch .ToShortTimeString angesagt.

    Das wird schwer, weil die Überladung substract(Datetime) als Ergebnis Timespan hat, un der keine .ToShortTimeString Methode kennt :(
    msdn.microsoft.com/de-de/library/8ysw4sby(v=vs.100).aspx
    Aber natürlich besser

    VB.NET-Quellcode

    1. Dim diffZeit As TimeSpan = eingabeDatum.Subtract(aktuelleZeit)
    2. Label1.Text = diffZeit.ToString("hh\:mm")