DateDiff/DateAdd Problem

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von holzwurm.

    DateDiff/DateAdd Problem

    Hallo zusammen.... ich bin neu hier im forum und da ein kleines problem...

    ich möchte ein zeiterfassungstool programmieren, welches beim rechnerstart die startzeit vermerkt, die arbeitszeit errechnet, etc.
    unter anderem soll es auch die pausenzeit mit einrechnen und das soll so aussehen:
    ich hab' einen button, welcher beim drücken die aktuelle zeit in eine variable abspeichert und einen button, der gedrückt werden muss, wenn man aus der pause wieder zurück ist (speichert ebenfalls die aktuelle zeit in einer variable)...
    per "datediff" lasse ich die differenz der beiden zeiten errechnen, was auch klappt...
    nun möchte ich diese differenz zum errechneten feierabend per dateadd aufrechnen und genau da liegt mein problem... ich bekomm es mit den datentypen einfach nicht hin X(
    ein kleiner auszug:

    Quellcode

    1. Dim Systemzeit As System.DateTime = Now
    2. arbeit_mit_nachlauf = Mid(DateAdd("n", NumericUpDown1.Value * 60, Systemzeit), 12, 10)
    3. 'feierabendanzeige
    4. Label7.Text = DateAdd("n", NumericUpDown3.Value, arbeit_mit_nachlauf)
    5. 'pausebutton
    6. pause = FormatDateTime(Now, DateFormat.LongTime)
    7. 'zurückbutton
    8. pause_ende = FormatDateTime(Now, DateFormat.LongTime)
    9. aufschlag = DateDiff("n", pause, pause_ende)


    ps: es ist unter anderem eine kleine funktion verbaut um einen vorlauf / nachlauf einzustellen, wenn man den rechner z.B. erst 5 minuten nach arbeitsbeginn angeschalten hat....


    ein kleiner ansatz von mir sah so aus:
    'Label7.Text = DateAdd("n", Mid(DateAdd("n", NumericUpDown1.Value * 60, Systemzeit), 12, 10), aufschlag)
    als fehlermeldung bekam ich, dass dieser befehl überladen sei... ich hab anschließend alles durch variablen ersetzt, aber fehlanzeigen X(

    weiss einer abhilfe?
    vielen dank schon mal :)
    gruß tomml
    Hallo tomml,

    wenn bei einer Funktion die Überladung nicht stimmt, dann bedeutet das das entweder zuviele Parameter, zuwenige Parameter oder die falschen Datentypen übergeben werden.

    Anmerkung:
    Mid stammt aus VB6 Zeiten und sollte unter VB.NET nicht mehr verwendet werden.

    Gruss

    mikeb69
    Vielleicht kannst Du Dein Problem so formulieren, dass es verständlich ist.
    Verwende dazu maximal 4 Sätze und einen kurzen Quellcode-Schnipsel.
    Dafür gibt es den VB-Tag (der 4. von rechts in der unteren Zeile über diesem Editor).
    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!
    okay ich versuchs nochmal :)

    ich möchte eine zeitspanne, die per datediff errechnet wurde zu einer zeit addieren, die vorher allerdings schon per dateadd berechnet wurde.


    Das hier ist die schon errechnete zeit:

    VB.NET-Quellcode

    1. arbeit_mit_nachlauf = Mid(DateAdd("n", NumericUpDown1.Value * 60, Systemzeit), 12, 10)
    2. Label7.Text = DateAdd("n", NumericUpDown3.Value, arbeit_mit_nachlauf)



    und das hier ist die berechnung, die eben zu der oben beschriebenen zeit dazugerechnet werden soll:

    VB.NET-Quellcode

    1. aufschlag = DateDiff("n", pause, pause_ende)


    wisst ihr nu was ich meine?
    wenn ich "aufschlag" ins format "date" umwandeln möchte, sagt VB, dass ich den datentyp "long" nicht in "date" umwandeln kann...


    btw:
    mikeb69, du kommst aus neusäß?
    das ja gleich bei mir um die ecke :))
    Ich versuch es noch mal, wie auch mikeb69:
    Mid kennen wir nicht.
    Ist DateDiff eine Funktion von Dir? Wir kennen sie nämlich nicht.
    Sieh Dir mal die Klassen

    VB.NET-Quellcode

    1. Dim dt As DateTime
    2. Dim ts As TimeSpan
    an. Mit ihnen kannst Du Dein Problem lösen.
    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!

    VB.NET-Quellcode

    1. Dim dt1 As DateTime = DateTime.Now ' jetzt (mit Uhrzeit)
    2. ' oder
    3. Dim dt1 As DateTime = New DateTime(2011, 8, 2) ' heutiges Datum, 0:00:00 Uhr
    4. Dim dt2 As DateTime = New DateTime(2011, 8, 1, 17, 44, 13) ' gestriges Datum, 17:44:13 Uhr
    5. Dim ts As TimeSpan = dt2 - dt1 ' Differenz beider Zeiten
    6. Dim txt As String = ts.ToString ' Differenzzeit als String: "-06:15:47"
    7. Dim t11 As String = dt1.ToLongTimeString ' "00:00:00"
    8. Dim t12 As String = dt1.ToLongDateString ' "Dienstag, 2. August 2011"
    9. Dim t21 As String = dt2.ToLongTimeString ' "17:44:13"
    10. Dim t22 As String = dt2.ToLongDateString ' "Montag, 1. August 2011"
    11. ' Werte zum Aufbauen eines zusammengesetzten Typs (Tag, Stunde, Minute, Sekunde)
    12. Dim dd1 As Integer = ts.Days ' 0
    13. Dim hh1 As Integer = ts.Hours ' -6
    14. Dim mm1 As Integer = ts.Minutes ' -15
    15. ' Werte zum weiterrechnen in der jeweiligen Einheit
    16. Dim dd2 As Double = ts.TotalDays ' -0.26096064814814812
    17. Dim hh2 As Double = ts.TotalHours ' -6.2630555555555549
    18. Dim mm2 As Double = ts.Minutes ' -375.78333333333336
    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!

    VB.NET-Quellcode

    1. Dim yy, mm, dd, hh, min, sec As Integer
    2. yy = Integer.Parse(TextBox1.Text)
    3. mm = ...
    4. Dim dt2 As DateTime = New DateTime(yy, mm, dd, hh, min, sec)
    Den Rest bekommst Du sicher selbst heraus.
    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!