【问题标题】:JSON parse DateTimeJSON解析日期时间
【发布时间】:2016-04-27 12:32:19
【问题描述】:

从服务器我得到这个字符串

[{\"id\":\"9b77ff1e-350e-44d8-8860-15e80f4d8a22\",\"code\":\"C\",\"name\":\"0%\",\"validFrom\":\"2013-07-01T00:00:00Z\",\"validTill\":null,\"active\":1,\"vatProc\":0.0,\"createdAt\":\"2015-02-01T13:04:17.733Z\",\"updatedAt\":\"2015-02-01T13:04:17.733Z\"}]

然后我在客户端使用 JSON.parse 将其转换为 json 对象,生成结果:

[
{
active:1
code:"C"
createdAt:"2015-02-01T13:04:17.733Z"
id:"9b77ff1e-350e-44d8-8860-15e80f4d8a22"
name:"0%"
updatedAt:"2015-02-01T13:04:17.733Z"
validFrom:"2013-07-01T00:00:00Z"
validTill:null
vatProc:0
}
]

如果不是日期字段,这就是您所期望的。

服务器上的日期已转换为 UTC。

我知道我可以传递一个函数来解析函数来进行转换。 我只想格式化日期,这样如果你知道我的意思,常规解析就会“正确”地完成

我在网上看到没有“正确”的方法,而且我在网上阅读的每个案例都在客户端进行转换。

那么真的没有办法告诉常规的 json 解析器这是一个日期吗?

我可以选择将该日期时间转换为可以在服务器上使用的时间

客户端: AngularJS

服务器端: C# WCF / json

编辑:

我遇到的问题是,如果我在 AngularJS 中使用 ValidFrom 作为模型,它会抱怨它不是约会女巫,实际上不是

AngularJS 错误:

Expected `2013-07-01T00:00:00Z` to be a date

【问题讨论】:

  • 问题是什么?两个文本是一样的。日期没有改变。 Z 表示它们 UTC。结果是什么?请发布您使用的代码,结果是什么以及您的期望。您是否获得了 DateTimeKind 属性 不是 UTC 的 DateTime?你希望得到当地时间吗?为什么不使用已有的 DateTime 对象?
  • 您可以使用 .ToLocalTime() 将 UTC 转换为您的“本地”时间,但 确实会随着 DST 改变
  • 更多信息在编辑中
  • 将尝试使用角度解析器对其进行转换。仍然不喜欢它,但看起来是唯一可行的方法

标签: c# angularjs json wcf json.net


【解决方案1】:

在向客户端发送日期之前,我将 DateTimeKind 属性设置为 utc

SomeObject.Date=  DateTime.SpecifyKind(SomeObject.Date, DateTimeKind.Utc);

在将任何日期保存到服务器之前,我会这样做:

SomeObject.Date=  SomeObject.Date.ToUniversalTime();

客户端的唯一要求是使用 momentjs format() 方法将日期转换为 ISO-8601

按照这种方法,JSON 总是能在客户端正确处理时间(至少到目前为止它对我来说运行良好)

This helped me a lot

【讨论】:

  • 换句话说,始终使用 UTC。更好的解决方案是使用 DateTimeOffset 而不是进行任何转换
  • 谢谢,我想要一个更好的解决方案,我不喜欢每次都转换每个日期属性,但至少这已经解决了我的 utc -> 到目前为止的本地时间问题,如果你可以发布一个链接更好的方法,我将不胜感激。
  • 我尝试了你的方法,但导致服务器的输出相同
  • 您是否按照教程使用了 moment.js 和所有内容?
  • 感谢您很高兴了解 moment.js,但这将是一个客户端解决方案,如果必须的话,我想使用尽可能少的 JS,但我想找到一个服务器端如果有我在问题中所说的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多