gpt4 book ai didi

asp.net - .net JSON 序列化程序将本地客户端时间返回给浏览器?

转载 作者:行者123 更新时间:2023-12-04 12:25:45 25 4
gpt4 key购买 nike

我使用 asp.net [WebMethod] 将 .net 对象推送回浏览器上的 Ajax 调用。
对象的属性之一是 DateTime 类型。
当它到达浏览器时,时间比 SQL Server 中存储的时间早七个小时。
好的,所以我的浏览器在秘鲁 (GMT-5),服务器在德国(目前是 GMT+2),这就是 7 小时的来源。

作为修复,我使用 Ajax 请求在客户端上发送 UTC 偏移量

d = new Date();
d.getTimezoneOffset();

然后在服务器上我找出那里的偏移量:
  // get a local time zone info
TimeZoneInfo tz = TimeZoneInfo.Local;

// get it in hours
int offset = tz.BaseUtcOffset.Hours;

// add one hour if we are in daylight savings
if (tz.IsDaylightSavingTime(DateTime.Now))
{
offset++;
}

现在我可以在将对象发送到浏览器之前修复对象中的时间字段。

我真正的问题是,序列化程序如何知道 7 小时?

http 请求不包含任何时间信息。

如果我想要存储在数据库中的确切时间,我会问太多吗?

更新:

举个例子,数据库中的日期是:2009-Oct-15 22:00

没有附加时区信息。

当我在我的开发机器上调用我的 WebMethod 时,客户端和服务器
显然在同一时区,来自服务器的 JSON 是:
{"d":{"TheDate":"\/Date(1255662000000)\/"}}

来自德国远程服务器的 JSON 是:
{"d":{"TheDate":"\/Date(1255636800000)\/"}}

如 Firebug 中所见,JSON 中存在 7 小时的差异。在这
目前还没有涉及 JavaScript。

我的一个想法是 asp.net 将 TimeZone 附加到 session ,但情况似乎并非如此。

最佳答案

为了避免奇怪的错误和不得不处理这些类型的问题,您应该始终使用 UTC 并在最后可能的时刻转换为本地时间。

一旦 DateTime 到达浏览器,您如何检查它?您确定原始序列化格式不包括偏移量作为 DateTime 对象的一部分吗?在这种情况下,它可以在本地时间的另一端重组

关于asp.net - .net JSON 序列化程序将本地客户端时间返回给浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1569421/

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