让我们假设以下示例代码:
[<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"
}
}
"""
关于.net - F# JSON 类型提供程序 : Handling DateTime and TimeZone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63037937/