簡體   English   中英

F# JSON 類型提供程序:處理日期時間和時區

[英]F# JSON Type Provider: Handling DateTime and TimeZone

讓我們假設以下示例代碼:

[<Literal>]
let jsonSample =
   """
   {
      "TimeInterval": {
          "Start" : "2010-01-01",
          "End"   : "2010-01-02"
      }
   }
   """

type MyJson = JsonProvider<jsonSample>

TypeProvider 成功地將字段類型識別為 DateTime,但是它自動將“DateTimeKind”字段設置為“Local”。 結果,我的代碼變得依賴於它運行的機器和 Windows 設置中設置的時區。

當我嘗試往返以下記錄時:

{ "TimeInterval": { "Start" : "2010-01-01", "End" : "2010-01-02" } }

我的機器設置為“歐洲/伯爾尼+1”,我最終序列化

{ "TimeInterval": { "Start" : "2010-01-01T00:00:00000+01:00", "End" : "2010-01-02T00:00:00000+01:00" } }

我可以更改此行為並指示類型提供者將 DateTime 的“種類”字段“未指定”嗎?

編輯:

我通過以下方式進行往返:

let json = MyJson.Parse inFilePath
use outputStream = new StreamWriter(outFilePath, false)
outputStream.WriteLine (json.JsonValue.ToString())
json.JsonValue.ToString()

我認為在 JSON 類型提供程序中沒有配置時區處理的方法。 這總是一場噩夢,無論你如何處理它,所以我認為我們必須為此添加太多參數才能讓人們做他們可能需要做的一切。

不幸的是,我的建議是只更改示例,以便將值作為string獲得。 這意味着您必須自己進行日期處理,但它應該可以解決往返問題。

[<Literal>]
let jsonSample =
   """
   {
      "TimeInterval": {
          "Start" : "handling dates is pain / 2010-01-01",
          "End"   : "handling dates is pain / 2010-01-02"
      }
   }
   """

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM