首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器端到Javascript的不正确时区

服务器端到Javascript的不正确时区
EN

Stack Overflow用户
提问于 2014-06-12 19:32:48
回答 1查看 1.2K关注 0票数 0

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

代码语言:javascript
复制
protected double GetAccountTime()
{
    return ((DateTime)unit.SomeMethod(DateTime.UtcNow))
            .Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
            .TotalMilliseconds;
}

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

在Javascript方面:

代码语言: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 (Eastern Standard Time)。就时间而言,这是正确的,但时区仍然是东方的。有谁知道我怎么解决这个问题吗?

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

  • 它将获得帐户的时间,为不同的记录镜头(可能在不同的地点)。
  • 将会有一个类似时间线的光标,它需要帐户时间(而不是本地时间)。
  • 会有一些选项将时间发送回服务器端,因此知道正确的偏移量将使这更容易。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-12 19:35:21

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

你不需要做任何转换-你有正确的时间点。(实际上,用Date在时区之间进行转换是没有意义的,因为它只是一个时间点。)

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

例如,在Chrome控制台中:

代码语言:javascript
复制
> 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方面做更多的工作,您可能也想看看我的野田时间计划

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24192558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档