gpt4 book ai didi

c# - 从服务器端到 Javascript 的时区不正确

转载 作者:行者123 更新时间:2023-11-28 19:46:29 24 4
gpt4 key购买 nike

我在 C#(服务器)端有这个方法:

protected double GetAccountTime()
{
return ((DateTime)unit.SomeMethod(DateTime.UtcNow))
.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
.TotalMilliseconds;
}

我的本​​地机器时间是东部时间,但我的应用程序的帐户时间是山地时间。所以我想将其更改为东部山区时间。 unit.SomeMethod(...) 仅获取当前本地时间(东部时间)并将其转换为帐户时间(山地时间)。

在 Javascript 方面:

var now = new Date(<%=GetAccountTime()%>);
alert(now);//doesn't consider the time to be UTC, need to convert
var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
alert("UTC: " + now_utc);

第一个警报语句给我的 Thu Jun 12 2014 09:30:42 GMT-0400 (Eastern Standard Time) 这是不正确的。我将时间转换为 UTC,因此第二个警报语句为我提供 UTC: Thu Jun 12 2014 13:30:42 GMT-0400(东部标准时间)。就时间而言,这是正确的,但时区仍然是东部时区。有人知道为什么以及如何解决这个问题吗?

我的应用程序做什么(应@JonSkeet的要求):

  • 它将获取不同录制片段(可能在不同地点)的帐户时间。
  • 将会出现一个类似时间线的光标,需要帐户时间(不是本地时间)。
  • 有一些选项会将时间发送回服务器端,因此了解正确的偏移量将使这变得更容易。

最佳答案

一个Date对象没有任何时区的概念。它总是代表自 Unix 纪元以来的毫秒数。

您无需进行任何转换 - 您已经找到了正确的时间点。 (事实上​​,您可以使用Date在时区之间进行转换是没有意义的,因为它只是一个时间点。)

如果您担心字符串表示形式,可以调用toUTCString()toString() 函数将始终使用系统本地时间。

例如,在 Chrome 控制台中:

> var now = new Date();
> now.toString()
"Thu Jun 12 2014 20:35:33 GMT+0100 (GMT Daylight Time)"
> now.toUTCString()
"Thu, 12 Jun 2014 19:35:33 GMT"

编辑:现在我们有更多信息:

  • 如果您需要显示特定时区的特定时刻,我建议您在服务器端进行文本转换
  • 如果您需要将本地时间发送回服务器,我建议您以文本形式发送
  • 如果你可能可以,我无论如何都会避免使用“帐户时区”的想法 - 如果可能的话,尝试将所有内容存储为 UTC。无论如何都要在特定时区渲染值,用户应该能够控制该时区,但您应该尽量避免使用时区进行任何算术

如果您要在 .NET 方面做更多工作,您可能需要查看我的 Noda Time project ,也是。

关于c# - 从服务器端到 Javascript 的时区不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192558/

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