如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间

Posted

技术标签:

【中文标题】如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间【英文标题】:How to deserialize asp.net datetime as JSON datetime with client's timezone 【发布时间】:2015-07-21 15:34:27 【问题描述】:

我有点纠结于日期时间。我正在使用 asp.net mvc api 控制器、microsoft sql 服务器和 AngularJS。

单击某个按钮时,我将 JSON 格式的日期发送到 api 控制器。当我发布 2015-11-31 00:00 并查看 Fiddler 以查看真正发布的内容时,我看到日期的格式如下:2015-11-30T23:00:00.000Z。 (2015 年 11 月 31 日 - 1 小时 UTC+01:00 阿姆斯特丹、柏林、伯尔......)这是完美的,因为 sql 服务器可能所在的时区和客户端之间可能存在差异。 (或者是吗?)

但问题是:当我从 sql 服务器获取日期时,它没有考虑客户端的时区。当我从 sql server 读取 DateTime 对象并将其返回 JSON 格式时,显示的日期为:2015-11-30T23:00:00.000Z。我希望它在客户所在的时区增加 1 小时。

我的问题是:在反序列化从我的 api 控制器返回的 JSON 字符串时,我该怎么做才能将时区考虑在内?

TIA!

【问题讨论】:

【参考方案1】:

问题是当对象被反序列化时,日期属性不是日期时间类型。它是字符串类型。只需使用 new Date("2015-11-30T23:00:00.000Z") 将其转换为日期即可。

我为它做了过滤器:

.filter('from_gmt_to_local_date', [function () 
  return function (text) 
    return new Date(text);
  ;
])

用法:

contract.StartDate | from_gmt_to_local_date | date:'dd-MM-yyyy'

希望这对任何人都有帮助。

【讨论】:

以上是关于如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET 中使用时区?

如何防止 JSONKit 从 ASP.NET JSON 日期格式转义反斜杠?

Spring boot:JSON将带有时区的日期和时间反序列化为LocalDateTime

Asp.Net:将数据从 WCF 服务广播到 Asp.Net 客户端的最佳方式

JSON如何反序列化日期时间并将UTC转换为指定时区?

移动客户端的asp.net Web Api自定义身份验证要求