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

C# 从服务器端到Javascript的时区不正确,c#,javascript,.net,datetime,timezone,C#,Javascript,.net,Datetime,Timezone,我在C#(服务器)端有这样的方法: 我的本地机器时间是东部,但我的应用程序的帐户时间是山区。所以我想把它改成东部山区时间unit.SomeMethod(…)只需获取当前本地时间(东部)并将其转换为帐户时间(山区) 在Javascript端: var now = new Date(<%=GetAccountTime()%>); alert(now);//doesn't consider the time to be UTC, need to convert var now_utc =

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

我的本地机器时间是东部,但我的应用程序的帐户时间是山区。所以我想把它改成东部山区时间
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);
var now=newdate();
警惕(现在)//不认为时间是UTC,需要转换
var now_utc=新日期(now.getUTCFullYear()、now.getUTCMonth()、now.getUTCDate()、now.getUTCHours()、now.getUTCMinutes()、now.getUTCSeconds());
警报(“UTC:+现在UTC”);
第一条警报声明给出了2014年6月12日星期四09:30:42 GMT-0400(东部标准时间),这是不正确的。我将时间转换为UTC,因此第二条警报语句会给出UTC:2014年6月12日星期四13:30:42 GMT-0400(东部标准时间)。就时间而言,这是正确的,但时区仍然在东部。有人知道我为什么以及如何解决这个问题吗

我的申请所做的(应@JonSkeet的要求):

  • 它将获得不同记录片段(可能在不同位置)的帐户时间
  • 将有一个类似于游标的时间线,它需要帐户时间(而不是本地时间)
  • 将有一些选项将时间发送回服务器端,因此知道正确的偏移量将使这更容易
    • 对象没有任何时区的概念。它始终表示自Unix纪元以来的毫秒数

      你不需要做任何转换-你已经得到了正确的时间点。(事实上,您无法在带有
      日期的时区之间转换,因为这只是一个时间点。)

      如果您关心字符串表示,可以调用。
      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方面做更多的工作,你可能也想看看my。

      对象没有任何时区的概念。它始终表示自Unix纪元以来的毫秒数

      你不需要做任何转换-你已经得到了正确的时间点。(事实上,您无法在带有
      日期的时区之间转换,因为这只是一个时间点。)

      如果您关心字符串表示,可以调用。
      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方面做更多的工作,你可能也想看看my。

      对象没有任何时区的概念。它始终表示自Unix纪元以来的毫秒数

      你不需要做任何转换-你已经得到了正确的时间点。(事实上,您无法在带有
      日期的时区之间转换,因为这只是一个时间点。)

      如果您关心字符串表示,可以调用。
      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方面做更多的工作,你可能也想看看my。

      对象没有任何时区的概念。它始终表示自Unix纪元以来的毫秒数

      你不需要做任何转换-你已经得到了正确的时间点。(事实上,您无法在带有
      日期的时区之间转换,因为这只是一个时间点。)

      如果您关心字符串表示,可以调用。
      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"
      
      编辑:现在我们有更多的信息:

      • 如果您需要在特定时区中显示特定的时间瞬间,我建议您在服务器端进行文本转换
      • 如果您需要将本地时间发送回服务器,我建议您以文本形式发送
      • 如果可能的话,我会避免“账户”的想法