考慮以下將 a 轉換DateTime為 a 的代碼string,嘗試使用TryParseon 方法決議它DateTime,并回傳一個DateTime option指示決議是否string成功的代碼:
let dt = DateTime.Now
printfn "%A" dt
let parseDateTime (str: string) =
match DateTime.TryParse str with
| (true, v) -> Some v
| _ -> None
let parsedDateTime =
dt.ToString () |> parseDateTime
match parsedDateTime with
| Some v ->
printfn "%A" v
assert (v = dt)
| _ -> ()
該assert陳述句失敗,這我不會指望它。printfn將相同的字串列印到控制臺,這讓我更加困惑。
如果我改變了assert以上宣告assert (v.ToString() = dt.ToString())的assert傳球比較兩個時,我本來期望DateTime的值。
在DateTime平等方面,我在這里遺漏了什么嗎?我已經使用這個還測驗int和Guid(換出DateTime.TryParse的Int32.TryParse和Guid.TryParse分別)和assert通行證,我會期望它平等比較值時。
uj5u.com熱心網友回復:
一個DateTime值的解析度是一個“滴答聲”,代表百萬分之一秒。您還需要考慮時區差異。默認輸出格式不包括此級別的詳細資訊。如果你想“往返”a DateTime,寫出來,ToString("o")然后DateTimeStyles.RoundtripKind在決議時使用:
open System
open System.Globalization
let parseDateTime (str: string) =
match DateTime.TryParse(str, null, DateTimeStyles.RoundtripKind) with
| (true, v) -> Some v
| _ -> None
let parsedDateTime =
dt.ToString ("o") |> parseDateTime // e.g. "2021-11-15T15:36:07.6506924-05:00"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/357912.html
