我知道这个问题多次被删除,我在这个哈希上阅读了很多帖子,但仍然感到困惑。
使用MVC4 / WebAPI,我有一个日期时间,只是创建为新的DateTime.Now。
我的WebAPI是这样的返回数据:
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new
{
data = sessionRecordSmalls,
count = sessionRecordSmalls.Count,
success = true
});
其中sessionRecordsSmall的公共属性为DateTime。
当我查看VS调试器中的日期时,它现在显示为没有时区,因为DateTime不包含时区。
{10/6/2012 9:45:00 AM}
当我查看从服务器下载的内容时,我会在JSON中看到
2012-10-06T09:45:00
我认为T0意味着时区0,而不是100%肯定。我的JavaScript库将其解释为时区0,然后显示下载为GMT的实际日期(-9小时前为我)。
我的问题是,JSON下载了什么?这包括时区吗?我在这里错过了一些重要的步骤吗?
答案 0 :(得分:44)
如果使用json.net进行序列化,请记住您可以指定DateTimeZoneHandling。
WebApiConf.cs中的示例
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.DateTimeZoneHandling =Newtonsoft.Json.DateTimeZoneHandling.Local;
答案 1 :(得分:14)
日期时间2012-10-06T09:45:00
,我们使用Web API和默认序列化程序在JSON中重现{/ 3}}格式。
实际上这就是所谓的the ISO 8601。提取物:
..单个时间点可以通过连接a来表示 完整的日期表达式,字母T作为分隔符,并且有效 时间表达。例如“2007-04-05T14:30”......
此格式没有时区信息。正如Combined date and time representations摘录中提到的那样:
ISO 8601中的时区表示为当地时间(使用 未指定的位置),UTC,或UTC的偏移量。如果没有UTC 关系信息以时间表示给出,时间是 假设是在当地时间。
换句话说,如果没有指定UTC的偏移量,则将其视为本地时间。
Time zone designators将在末尾Z
延长
如果时间是UTC,请在没有时间的情况下直接添加Z. 空间。 Z是零UTC偏移的区域指示符。 “09:30 UTC” 因此表示为“09:30Z”或“0930Z”。 “14:45:15 UTC”会 是“14:45:15Z”或“144515Z”。
UTC时间也被称为“Zulu”时间,因为'Zulu'是'Z'的北约语音字母词。
因此,我们收到的日期时间是ISO 8601格式,被视为本地时区(最后没有Z
,如此2012-10-06T09:45:00Z
)