Ich möchte Strings von time (Stunden, Minuten, Sekunden) verarbeiten können, wobei die Stunden von 0 bis 23 laufen und die vorangehende Null für einstellige Stunden optional ist.
Beispiele für time Strings, die ich in gültige DateTime
-Objekte analysieren kann:
Ich versuche, die C # -Methode DateTime.ParseExact zu verwenden, um die Analyse zu verwalten, aber Ich kann für das Leben davon nicht mit einer Formatzeichenkette kommen, die das "einstellige Stunde ohne vorhergehende Null" -Szenario behandeln kann.
Wie soll ich die% format-Zeichenfolge% co_de angeben, um alle obigen Beispiele mit der gleichen Codezeile zu analysieren?
Inspiriert von der MSDN-Seite zu benutzerdefinierten Datums- und Uhrzeitformaten habe ich Folgendes versucht Ansätze:
%Vor% Alle diese Formatzeichenfolgen funktionieren für die ersten beiden obigen Beispielfälle, aber mit einer einstelligen Stunde und keiner vorhergehenden Null konfrontiert, werfen alle Formulierungen einen DateTime.ParseExact
.
Sie können Trennzeichen zwischen Stunden, Minuten und Sekunden wie folgt einfügen:
%Vor% UPDATE:
Ich habe die Fehlerursache gefunden, als ich "94505"
mit der Formatzeichenkette "Hmmss"
:
Was passiert, ist, dass H, m und s tatsächlich zwei Ziffern erfassen, wenn sie können, auch wenn es für den Rest des Formats nicht genügend Ziffern geben wird. Also zum Beispiel mit dem Format Hmm und den Ziffern 123, H würde 12 greifen und da wäre nur noch eine 3 übrig. Und mm erfordert zwei Ziffern, so dass es fehlschlägt.
Sie haben also grundsätzlich zwei Möglichkeiten, das Szenario "einstellige Stunde ohne vorhergehende Null" zu behandeln:
Zeitformat ändern: Platzieren Sie Stunden bis zum Ende (z. B. "ssmmH"
oder "mmssH"
) oder verwenden Sie Trennzeichen (z. B. "H:mm:ss"
)
Ändern Sie die Zeichenfolge, wie ich sie bereits vorgeschlagen habe, oder wie keyboardP hat.
Tags und Links c# datetime string-parsing