.net - F# JSON 类型提供程序 : Handling DateTime and TimeZone

标签 .net datetime f# timezone type-providers

让我们假设以下示例代码:

[<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/

相关文章:

.net - 在 64 位进程中调用 DhcpGetClientInfo 失败

c# - 带有每个字符串标签的 AutoCompleteStringCollection

php - PHP 函数 strtotime() 支持哪些日期格式?

python - 使用Python从excel文件中写出没有时间的日期

recursion - F# 中的递归对象?

.net - 堆栈跟踪中的行号错误(发布)

c# - 不可变对象(immutable对象)是好的做法吗?

c# - 如何在 Linq to SQL 中添加日期

f# - 如何读取文件并跳过一些空格

f# - 使用 Codedom 在运行时编译 F# 源代码?