Mit String.Format Datum umdrehen (yyyy.MM.dd)

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

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

    Mit String.Format Datum umdrehen (yyyy.MM.dd)

    Hallo ihr lieben
    Nach dem droppen einer Datei auf meiner Form erscheint ein Fenster, auf dem eine Bestellung ausgewählt wird.
    Hier habe ich mir dann aus dem DataTable das Bestelldatum gepult und ihn als Dateinamen verwendet:

    VB.NET-Quellcode

    1. Filename = SelectedOrderRow.OrderDate.ToShortDateString

    Das klappt wunderbar.
    Nun würde ich aber gerne das Format des Datums in "Filename" ändern und zwar hätte ichs gerne andersherum. Also im Format yyyy.MM.dd - das erledige ich mittels String.Format wie folgt:

    VB.NET-Quellcode

    1. Dim SelectedOrderRow = DirectCast(DirectCast(Orderselect.OrderBindingSource.Current, DataRowView).Row, DtsSettings.OrderRow)
    2. Dim Orderdate As Date = SelectedOrderRow.OrderDate
    3. Dim Filename As String
    4. Filename = String.Format(Orderdate, "yyyy") & "." & String.Format(Orderdate, "MM") & "." & String.Format(Orderdate, "dd")


    Mit String.Format mache ich es auch an anderer Stelle klappt immer wunderbar. Aber hier nicht:
    Es erscheint bei allen drei String.Format Anweisungen der gleiche Fehler:

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler BC30518 Fehler bei der Überladungsauflösung, da keine zugreifbare "Format" mit diesen Argumenten aufgerufen werden kann:
    "Public Shared Overloads Function Format(format As String, arg0 As Object) As String": "Option Strict On" lässt keine impliziten Konvertierungen von "Date" in "String" zu.
    "Public Shared Overloads Function Format(format As String, ParamArray args As Object()) As String": "Option Strict On" lässt keine impliziten Konvertierungen von "Date" in "String" zu.
    "Public Shared Overloads Function Format(format As String, ParamArray args As Object()) As String": Ein Argument kann nicht mit einem ParamArray-Parameter übereinstimmen.
    "Public Shared Overloads Function Format(provider As IFormatProvider, format As String, ParamArray args As Object()) As String": Der Wert vom Typ "Date" kann nicht in "IFormatProvider" konvertiert werden. DasProgramm C:\Users\flori\Documents\VB Programme\DasProgramm\DasProgramm\frmMainForm.vb 538 Aktiv

    Was habe ich hier falsch gemacht?
    So würde ich es machen.
    Oder spricht was dagegen? ?(

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Filename As String = String.Format(Now.ToString, "yyyy.MM.dd")
    3. Me.Text = Filename
    4. End Sub

    Visual Basic.NET 8o
    MS-SQL
    8o
    Hmm. Das war zu wenig Code xD

    Theoretisch spricht nix dagegen. Aber klappt nicht...

    VB.NET-Quellcode

    1. Dim SelectedOrderRow = DirectCast(DirectCast(Orderselect.OrderBindingSource.Current, DataRowView).Row, DtsSettings.OrderRow)
    2. Dim Orderdate As Date = SelectedOrderRow.OrderDate
    3. 'Dim Filename = String.Format(Orderdate.ToString, "yyyy") & "." & String.Format(Orderdate.ToString, "MM") & "." & String.Format(Orderdate.ToString, "dd")
    4. Dim Filename = String.Format(Orderdate.ToString, "yyyy.MM.dd")
    5. MessageBox.Show(Filename)
    6. Exit Sub


    Dim Filename = String.Format(Orderdate.ToString, "yyyy.MM.dd")
    gibt mir "09.05.2020" aus.
    Dim Filename = String.Format(Orderdate.ToString, "yyyy") & "." & String.Format(Orderdate.ToString, "MM") & "." & String.Format(Orderdate.ToString, "dd")
    gibt mir "09.05.2020 00:00:00 09.05.2020 00:00:00 09.05.2020 00:00:00" aus. Die Codezeile läuft aber definitiv nur einmal (habe im Einzelschritt getestet).

    Ich habe keine Ahnung mehr, was hier los ist...
    Hier mal der gesamt Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Orderdropped(Fileinfo As FileInfo, Supplier As String)
    2. Dim FileNameAddition = ""
    3. 'Prüfen ob Ordner existieren
    4. Dim TargetPath = New DirectoryInfo(My.Application.Info.DirectoryPath & "\Daten\Bestellungen\" & Supplier)
    5. If Not TargetPath.Exists Then TargetPath.Create()
    6. 'Auswahl um welche Bestellung es sich handelt
    7. Using Orderselect As New frmInvoiceSelect
    8. Orderselect.DtsSettings = Me.DtsSettings
    9. Orderselect.SupplierBindingSource.DataSource = Me.DtsSettings
    10. Orderselect.SupplierBindingSource.Position = SupplierBindingSource.Position
    11. Orderselect.ShowDialog(Me)
    12. If Orderselect.DialogResult <> DialogResult.OK Then Return
    13. Dim SelectedOrderRow = DirectCast(DirectCast(Orderselect.OrderBindingSource.Current, DataRowView).Row, DtsSettings.OrderRow)
    14. Dim Orderdate As Date = SelectedOrderRow.OrderDate
    15. Dim Filename = String.Format(Orderdate.ToString, "yyyy") & "." & String.Format(Orderdate.ToString, "MM") & "." & String.Format(Orderdate.ToString, "dd")
    16. 'Dim Filename = String.Format(Orderdate.ToString, "yyyy.MM.dd")
    17. MessageBox.Show(Filename)
    18. Exit Sub
    19. 'TODO Datum umdrehen
    20. 'prüfen ob Datei bereits existiert
    21. If File.Exists(TargetPath.FullName & "\" & SelectedOrderRow.OrderDate.ToShortDateString & Fileinfo.Extension) Then
    22. Using NewFileName As New frmFileNameChange()
    23. With NewFileName
    24. .LBLFileName.Text = SelectedOrderRow.OrderDate.ToShortDateString & " "
    25. .LBLExtension.Text = Fileinfo.Extension
    26. .LBLMainText.Text = "Die Bestellung " & SelectedOrderRow.OrderDate.ToShortDateString & Fileinfo.Extension &
    27. " existiert bereits. " & Environment.NewLine & "Bitte Zusatz angeben, oder überschreiben."
    28. .ShowDialog(Me)
    29. If .DialogResult = DialogResult.OK Then
    30. FileNameAddition = " " & .TBFileNameAddition.Text
    31. ElseIf .DialogResult = DialogResult.Ignore Then
    32. FileNameAddition = ""
    33. Else
    34. Return
    35. End If
    36. End With
    37. End Using
    38. End If
    39. 'Datei kopieren
    40. Fileinfo.CopyTo(TargetPath.FullName & "\" & SelectedOrderRow.OrderDate.ToShortDateString & FileNameAddition & Fileinfo.Extension, True)
    41. End Using
    42. End Sub


    Edit: @petaod Post zu spät gesehen. Läuft einwandfrei und ist ja auch irgendwie angenehmer, als mit meinem String.Format rumzufummeln.

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

    DerSmurf schrieb:

    Aber klappt nicht...
    Na dann mach es halt richtig:

    VB.NET-Quellcode

    1. Dim Filename = String.Format("{0:yyyy.MM.dd}", DateTime.Now)
    2. MessageBox.Show(Filename)
    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!