DateTime.ParseExact - Wie analysiert man ein- und zweistellige Stunden mit der gleichen Formatzeichenfolge?

8

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:

  • 212540
  • 061525
  • 94505

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 .

    
Anders Gustafsson 24.09.2013, 10:26
quelle

3 Antworten

2

Sie können Ihre Eingabe streichen, wenn Sie wissen, dass Sie immer sechs Zeichen haben werden.

%Vor%

(Oder verwenden Sie input.Length == 5 , wenn Sie andere gültige Formate haben, die kürzer sind).

    
keyboardP 24.09.2013, 10:31
quelle
4

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" :

analysiert habe
  

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:

  1. Zeitformat ändern: Platzieren Sie Stunden bis zum Ende (z. B. "ssmmH" oder "mmssH" ) oder verwenden Sie Trennzeichen (z. B. "H:mm:ss" )

  2. Ändern Sie die Zeichenfolge, wie ich sie bereits vorgeschlagen habe, oder wie keyboardP hat.

Alexander Simonov 24.09.2013 10:59
quelle
0

Was ist mit der Verwendung:

DateTime.ParseExact (time_string, "Hmmss", CultureInfo.InvariantCulture) .ToString ("HH: mm: ss")

    
chimino 21.08.2015 16:53
quelle

Tags und Links