gpt4 book ai didi

javascript - Internet Explorer、Json.Net JavaScript 日期和毫秒问题

转载 作者:数据小太阳 更新时间:2023-10-29 03:49:26 28 4
gpt4 key购买 nike

我不确定是我遗漏了什么 - 还是 IE 或 Json.Net。

但基本上这是可行的:

新日期("2012-08-03T12:36:54.743Z")

失败并出现“无效日期”错误:

新日期("2012-08-03T12:36:54.74Z")

第二个日期在 SQL Server 中存储为:

2012-08-03 12:36:54.740

然后使用 Json.Net 将其序列化为 JSON - Json.Net 确实将日期序列化为 2012-08-03T12:36:54.74Z,有效地切断了最后一个 0。

我的问题:

  • 这是 IE 中的预期行为吗 - 它需要所有 3 位毫秒位才能工作?
  • 这是 Json.Net 中的预期行为吗?它总是会删除日期中的最后一个 0 吗?

最佳答案

我无法告诉您它是否有意为之,但我已经进行了大量搜索,但我也没有找到解决此问题的真正解决方案。看来我们不得不接受IE只接受恰好三位数的事实。解决此问题的唯一方法(对我而言)是在序列化时使用 Json.NET 的自定义转换器:

string json = JsonConvert.SerializeObject(
whatEver,
new IsoDateTimeConverter
{
DateTimeFormat = "yyyy-MM-dd\\THH:mm:ss.fffK"
}
);

(仅使用 Json.NET 4.0.8 和 4.5.8 进行测试)

这会强制 Json.NET 使用精确的 3 位小数。

据我所知,Json.NET 序列化了 DateTime ISO 格式的值,具有最大必要精度,在“第二”值的小数位中省略尾随零。

这匹配

的输出
someDateTimeValue.ToString("yyyy-MM-dd\\THH:mm:ss.FFFFFFFK")
  • 正常DateTime喜欢DateTime.UtcNow将被序列化为最多 7 位数字,因为这是 DateTime 的精度(以滴答为单位)。
  • 如果 DateTime 的“第二”部分有较少的小数位,Json.NET 会忽略那些尾随的零。
  • DateTime.Today 这样的日期值因此,“第二个”值后面没有个数字,因为它恰好是 0 .

See also this description of custom date and time format strings.

关于javascript - Internet Explorer、Json.Net JavaScript 日期和毫秒问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789114/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com