Si je reçois une chaîne de la ligne de commande et cela ressemble à ceci: Comment puis-je convertir cette chaîne à un objet DateTime dans F #? P> P>
3 Réponses :
Vous pouvez le faire aussi simplement que ceci:
let dateTime = System.DateTime.Parse "1-1-2011"
Pour ajouter une bonne chose à ce que 7Sharp9 a écrit, si vous souhaitez également gérer les échecs, vous pouvez écrire:
match System.DateTime.TryParse "1-1-2011" with | true, date -> printfn "Success: %A" date | false, _ -> printfn "Failed!"
Je ne savais pas qu'il était possible de le faire avec l'argument de sortie, agréable
Selon votre besoin spécifique, .Net's DateTime classe a plusieurs méthodes statiques pour convertir des chaînes vers @ 7Sharp9 a démontré le moyen le plus élémentaire d'effectuer une analyse de la date, avec un appel de méthode directe à Mais même F # 'S (BOOL, résultat) Type de retour Modèle de retour ici n'est pas idéal. La plupart du temps, vous n'avez pas besoin de la valeur par défaut si une analyse échoue. Une signature plus agréable pour Nous utilisons l'extension ci-dessus comme: P> datetime code>, celles-ci sont
denttime.parse code>,
denttime.parseexact code> et
datetime.tryparse code> et leur Plusieurs surcharges.
DateTime.Parse Code>. Mais où les choses sont intéressantes dans F # est avec
datetime.tryparse code>. Alors que
DateTime.Parse CODE> lancera une exception si l'analyse échoue, la surcharge la plus simple de
DateTime.tryparse code> a la signature
String * BYREF
byref code> à la date analysée si true, ou à sa valeur par défaut (
null code> dans ce cas) sinon. Cependant, la syntaxe d'utilisation de cela en F # est encombrante (et même ce n'est pas agréable de n'importe quelle langue .NET), la langue F # a donc été conçue avec une caractéristique spéciale qui permet une convention d'appel beaucoup plus agréable pour des méthodes telles que celles-ci comme @ Thomas Petricek pointu Out. P>
DateTime.tryparsee code> serait
String -> Option
DateTime code> comme nous le souhaitons: p>
> ["11/23/2003"; "not a date"; "1/1/23 23:23pm"] |> Seq.choose(|DateTime|_|);;
val it : seq<DateTime> =
seq
[11/23/2003 12:00:00 AM {Date = 11/23/2003 12:00:00 AM;
Day = 23;
DayOfWeek = Sunday;
DayOfYear = 327;
Hour = 0;
Kind = Unspecified;
Millisecond = 0;
Minute = 0;
Month = 11;
Second = 0;
Ticks = 632051424000000000L;
TimeOfDay = 00:00:00;
Year = 2003;};
1/1/2023 11:23:00 PM {Date = 1/1/2023 12:00:00 AM;
Day = 1;
DayOfWeek = Sunday;
DayOfYear = 1;
Hour = 23;
Kind = Unspecified;
Millisecond = 0;
Minute = 23;
Month = 1;
Second = 0;
Ticks = 638082121800000000L;
TimeOfDay = 23:23:00;
Year = 2023;}]
Dupliqué possible de F # - dates d'analyse
@Sebastian P - Similaire, mais je ne crois pas une duplication exacte, les deux questions demandent comment analyser les formats de date différents, ce qui conduit réellement à différentes réponses.