【发布时间】:2014-07-14 13:59:03
【问题描述】:
在开发应用程序时,我遇到了客户端和服务器之间的时间一致性问题。让我先描述一下应用程序。使用实体框架 ORM(MS SQL 服务器用作数据库引擎)(代码优先方法)。在客户端页面上,我有一个接受日期和时间的简单表单。当我想提交表单并发送数据时,会发生以下步骤:
- 用户按下提交(日期存储为 javascript 日期对象,因此使用当前用户时区)
- 包含要发送的所有表单数据(包括该日期和时间)的对象被序列化为 JSON。
JSON.Stringify所做的是将日期对象转换为该日期的字符串表示形式,但采用 UTC 格式。该日期存储在数据库中。 - 当用户请求此数据时,返回一个 JSON 字符串;但是服务器以正常格式(不是 UTC)返回日期。 JSON.parse 不会将表示日期的字符串转换为 javascript 对象。因此,当我解析日期时,我得到了错误的值。
示例:假设用户输入 05/25/2014 22:20:00,其时区偏移量为 GMT +3。现在用户提交的表单日期将转换为 UTC:05/25/2014 19:20:00,并将其保存到数据库中。然后用户请求数据并获得错误的日期和时间 - 19:20:00。
我意识到我可以通过在客户端手动解析日期来实现正确处理。但是有没有办法通过以下方式提供日期的一致性:
- 告诉 EF 将日期视为 UTC 并以 UTC 格式返回
- 告诉 JSON 反序列化器解析日期
我认为这将提供日期一致性。当然,我想以 UTC 存储日期 - 这是主要思想。
【问题讨论】:
标签: c# javascript entity-framework date