gpt4 book ai didi

Azure 时区和 javascriptserializer 对象

转载 作者:行者123 更新时间:2023-12-01 13:00:27 24 4
gpt4 key购买 nike

我在 Windows Azure 上有一个基于预测的应用程序 ( http://ipredikt.com )。据我所知,Azure 的时钟与 GMT 时区同步。这是我遇到的一个问题:

假设我有一个名为 CreateDate、类型为 DateTime 的数据库字段,并将其值设置为 2011 年 6 月 10 日凌晨 12:30。当创建新的预测时。如果我查看数据库表,日期设置正确。我不会以任何方式触及或改变这个值。但是,当我使用 API 读取该值、将其序列化并将其发送给客户端时,我得到的日期值为 2011 年 6 月 9 日下午 5:30。 (API dll 也存在于云中,并且可能与数据库并置。)

我的客户端浏览器在 PST(太平洋时区)运行,似乎 7 小时的差异是由于 PST 和 GMT 之间的差异造成的。用于序列化该值的 API 代码类似于:

System.Web.Script.Serialization.JavaScriptSerializer 序列化器 = new JavaScriptSerializer();

返回序列化器.Serialize(dataObject);

这是 JavaScriptSerializer 对象中的错误还是有修复此增量的技巧?基本上,我不希望 .NET 框架以任何方式干扰该值,我只希望 DB 字段按原样返回。

最佳答案

当您将 DateTime 对象传递到 Azure 时,其 Kind 等于 Local。
(2011年6月10日 12:30am -7)

但是,当您将其保存到数据库时,区域信息会丢失。随后,当从数据库读取此字段时,它会创建带有 Utc 区域的 DateTime(2011年6月10日 12:30am 0)

最终,您的客户端错误地读取了日期时间。

有多种选项可以解决此问题。

1) 将方法参数和数据库中的 DateTime 转换为 DateTimeOffset。这将保证您的本地区域(即 PST)将保存在数据库中

2) 使用 DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified) - 这样 DateTime 的类型是未指定的,并且随后按原样保存在数据库中。

var timeNow = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
serviceClient.SaveTime(timeNow);
var dateTime = serviceClient.GetTime();

关于Azure 时区和 javascriptserializer 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406194/

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