Datediff berechnet 1 Tag zu wenig

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von kwon.

    Datediff berechnet 1 Tag zu wenig

    Hallo,
    ich möchte in meinem Programm die Anzahl von Tagen zwischen 2 Daten berechnen (Datediff()) und bitte um Hilfe...
    Seltsamerweise berechnet Datediff (in Zeile 31) einen Tag zu wenig, woran könnte das liegen?

    Vielen Dank für eure Hilfe im Voraus!!

    Hier der code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Dim ueberOrdnerPfad As String = "D:\Aufgaben\", datstr As String, vbTage As String, oname As String
    4. Private Sub hinzufügeButton_Click(sender As Object, e As EventArgs) Handles hinzufügeButton.Click
    5. Dim pfadTextdatei As String = ueberOrdnerPfad & Me.TextBox1.Text & "\" & "Enddatum.txt"
    6. If Me.TextBox1.Text = "" Then Exit Sub
    7. 'Unterordner hinzufügen
    8. Directory.CreateDirectory(ueberOrdnerPfad & Me.TextBox1.Text & "\")
    9. 'Textdatei erstellen führt zu Problemen, in writealltext nur pfad angeben, sie wird dann erstellt falls nicht vorhanden (Tipp aus Forum)
    10. If Me.TextBox2.Text <> "" Then
    11. 'Enddatum in Textdatei schreiben
    12. File.WriteAllText(pfadTextdatei, Me.TextBox2.Text)
    13. Else
    14. 'kein Enddatum
    15. File.WriteAllText(pfadTextdatei, "")
    16. End If
    17. 'textdatei verstecken
    18. Dim info As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(pfadTextdatei)
    19. info.Attributes = info.Attributes Or System.IO.FileAttributes.Hidden
    20. oname = getOrdnerName(ueberOrdnerPfad & Me.TextBox1.Text & "\")
    21. datstr = System.IO.File.ReadAllText(pfadTextdatei)
    22. If datstr = "" Then
    23. vbTage = "999"
    24. Else
    25. vbTage = CStr(DateDiff("d", Date.Now, CDate(datstr)))
    26. End If
    27. If Len(vbTage) = 1 Then vbTage = "00" & vbTage
    28. If Len(vbTage) = 2 Then vbTage = "0" & vbTage
    29. oname = vbTage & "_" & oname
    30. 'Listbox aktualisieren
    31. ListBox.Items.Add(oname)
    32. End Sub
    33. Private Sub loeschButton_Click(sender As Object, e As EventArgs) Handles loeschButton.Click
    34. Dim X As Integer
    35. If X <> -1 Then
    36. ListBox.Items.RemoveAt(X)
    37. End If
    38. End Sub
    39. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    40. Dim pfad As String, pfadJeTextdatei As String
    41. Me.ListBox.Sorted = True
    42. For Each pfad In Directory.GetDirectories(ueberOrdnerPfad)
    43. 'Ordnername wird ermittelt
    44. oname = getOrdnerName(pfad)
    45. 'pfad je textdatei
    46. pfadJeTextdatei = pfad & "\Enddatum.txt"
    47. datstr = System.IO.File.ReadAllText(pfadJeTextdatei)
    48. If datstr = "" Then
    49. vbTage = "999"
    50. Else
    51. vbTage = CType(DateDiff("d", Date.Now, CDate(datstr)) + 1, String)
    52. End If
    53. If Len(vbTage) = 1 Then vbTage = "00" & vbTage
    54. If Len(vbTage) = 2 Then vbTage = "0" & vbTage
    55. oname = vbTage & "_" & oname
    56. 'Listbox aktualisieren
    57. ListBox.Items.Add(oname)
    58. Next pfad
    59. End Sub
    60. Function getOrdnerName(fpfad As String) As String
    61. Dim pos As Integer, l As Integer
    62. pos = InStrRev(fpfad, "\")
    63. l = Len(fpfad)
    64. getOrdnerName = Mid(fpfad, pos + 1, l)
    65. End Function
    66. End Class


    Aus VB-Paradise Guide verschoben und Code-Tags korrigiert ~EaranMaleasi

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

    @kwon Warum verewendest Du nicht .NET?

    VB.NET-Quellcode

    1. Dim dt1 = DateTime.Now
    2. Dim dt2 = new DateTime(2020, 12, 24)
    3. Dim sp = dt2.Date - dt1.Date ' hier die Uhrzeit abschneiden
    4. MessageBox.Show(sp.TotalDays.ToString())

    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!
    Weil nur ganze Tage als solche gezählt werden. Fehlt auch nur eine Sekunde zu den ganzen 24 Stunden, ist der angebrochene Tage nicht in der Zählung dabei.
    Bilder
    • Tagesdifferenz.png

      4,22 kB, 584×63, 60 mal angesehen
    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.