Zeichenfolge in System.DateTime in F # konvertieren

7

Wenn ich eine Zeichenfolge von der Befehlszeile abrufe, sieht das so aus:

%Vor%

Wie kann ich diese Zeichenfolge in ein DateTime-Objekt in F # konvertieren?

    
Ramy 09.02.2011, 20:13
quelle

3 Antworten

8

Sie könnten es so einfach machen:

%Vor%     
7sharp9 09.02.2011, 20:19
quelle
19

Abhängig von Ihren spezifischen Anforderungen verfügt die .NET-Klasse DateTime über mehrere statische Methoden für Konvertieren von Zeichenfolgen in DateTime Instanzen, dies sind DateTime.Parse , DateTime.ParseExact und DateTime.TryParse und ihre verschiedenen Überladungen.

@ 7sharp9 demonstrierte den grundlegendsten Weg zur Durchführung der Datumsanalyse mit einem direkten Methodenaufruf an DateTime.Parse . Aber wo es in F # interessant wird, ist mit DateTime.TryParse . Während DateTime.Parse eine Ausnahme auslöst, wenn das Parsen fehlschlägt, hat die einfachste Überladung von DateTime.TryParse die Signatur string * byref<DateTime> -> bool , die zurückgibt, ob das Parsen erfolgreich das Argument byref auf das analysierte Datum setzt, wenn true, oder auf den Standardwert Wert ( null in diesem Fall) andernfalls. Allerdings ist die Syntax für die Verwendung in F # umständlich (und in der Tat ist es aus keiner .NET-Sprache angenehm), daher wurde die F # -Sprache mit einer speziellen Funktion entworfen, die eine viel schönere Aufrufkonvention für Methoden wie diese ermöglicht, wie @Thomas Petricek zeigte aus.

Aber auch F # 's (bool, result) Rückgabetyp ist hier nicht ideal. In den meisten Fällen benötigen Sie den Standardwert nicht, wenn eine Analyse fehlschlägt. Eine schönere Signatur für DateTime.TryParse wäre string -> option<DateTime> . Zum Glück können wir DateTime nach Belieben erweitern:

%Vor%

Wir verwenden die obige Erweiterung wie folgt:

%Vor%

Dies ist konsistenter mit F # Konventionen (wie zB List.tryFind ). Aber auch das kann "besser" werden. Beachten Sie, wie wir auf das Ergebnis des try-Parsers abgleichen. Mit Partial Active Patterns (natürlich!) Können wir eine ganze Klasse von Testparsen umschließen und die Übereinstimmung für eine größere Flexibilität in den Match Case verschieben. Nimm das folgende

%Vor%

Mit diesen können wir eine nette kleine Konsolenanwendung schreiben:

%Vor%

Der Schlüssel, der zu beachten ist, ist die verschachtelte Übereinstimmung, wobei Int , Float , DateTime ihre Testpars innerhalb desselben Übereinstimmungsausdrucks ausführen.

Es gibt auch andere saubere Anwendungen dieser aktiven Muster, zum Beispiel können wir prägnant gleichzeitig eine Liste von Datumsstrings filtern und abbilden

%Vor%     
Stephen Swensen 09.02.2011 22:55
quelle
8

Um eine nette Sache zu dem hinzuzufügen, was 7sharp9 schrieb, wenn Sie auch Fehler behandeln wollen, können Sie schreiben:

%Vor%

Das ist nicht offensichtlich, weil die TryParse -Methode ein byref<DateTime> als letztes Argument hat (und mit out in C # verwendet wird), aber F # erlaubt es, die Methode so aufzurufen.

    
Tomas Petricek 09.02.2011 21:34
quelle

Tags und Links