Asp.net Azure c#、javascript、sql的日期时间问题……令人困惑。

Asp.net Azure c#、javascript、sql的日期时间问题……令人困惑。,asp.net,json,datetime,timezone,Asp.net,Json,Datetime,Timezone,好的,我的网站允许人们存储他们的工作日程。他们输入轮班开始日期时间和结束日期时间。很简单,对吧 我的想法是,我可以在网站上看到鲍勃今晚4-6点在芝加哥工作,乔晚上8-10点在纽约工作。这就是我希望在应用程序中显示日期的方式。如果我是从加利福尼亚观看该网站,我仍然希望为鲍勃展示《芝加哥时报》,为乔展示《纽约时报》。我不想把这些时间转换成加利福尼亚时报,在那里鲍勃从下午2点到4点工作,乔从下午5点到7点工作 我的站点有样本数据,当所有数据都位于同一时区时,这很好,但我现在已经将其部署到美国中北部的A

好的,我的网站允许人们存储他们的工作日程。他们输入轮班开始日期时间和结束日期时间。很简单,对吧

我的想法是,我可以在网站上看到鲍勃今晚4-6点在芝加哥工作,乔晚上8-10点在纽约工作。这就是我希望在应用程序中显示日期的方式。如果我是从加利福尼亚观看该网站,我仍然希望为鲍勃展示《芝加哥时报》,为乔展示《纽约时报》。我不想把这些时间转换成加利福尼亚时报,在那里鲍勃从下午2点到4点工作,乔从下午5点到7点工作

我的站点有样本数据,当所有数据都位于同一时区时,这很好,但我现在已经将其部署到美国中北部的Azure服务器上(它也使用位于那里的SQL Azure,尽管我不清楚它在哪里),现在日期和时间都关闭了(向前跳了7个小时)

我认为这样做的原因是我使用了大量Ajax和JSON,JSON要求datetimes的格式如下/Date(1240718400000)/,其中数字表示从epoch/Unix时间开始的毫秒数。我在日历/周/或日视图中显示日程安排,这需要大量的javascript日期时间比较

不管怎样,有人知道我该怎么做吗?我想我需要将日期时间存储为UTC,但我还需要知道用户工作轮班的时区,然后我需要在C#端对其进行调整,但我需要在javascript端执行任何操作吗


我只是有点困惑,似乎有太多的变量让我一时难以理解。

我认为你的思路是对的

对于在多个时区中访问的任何web应用程序,第一条经验法则是以UTC格式存储时间,因为以UTC格式存储日期/时间值的主要优点是,它通过提供一个通用参考点(所有时区都可以通过该参考点进行偏移)使数据可传输

在您的情况下,最好存储用户时区,以便您可以基于此信息渲染时间

当您读取UTC日期/时间和用户时区时,您可以直接在C#代码中计算此数据,并将此数据作为常规字符串传递给您的视图,或者因为此数据实际上用于用户的数据而不是日期。如果您使用的是JS,请不要执行以下操作,因为它将根据用户浏览器区域设置设置时间,而我会说只需作为字符串传递即可:

var datetime = new Date('May 29, 2012 2:52 AM UTC');
var formattedDateTime = dt.toLocaleString();

谢谢阿夫卡什。我最终按照你的建议做了,至少部分是这样。我更改了代码,将所有日期都视为UTC时区。因此,当纽约或加利福尼亚州的用户输入日期“6/1/2012 10:00AM”时,它将存储为“6/1/2012 10:00AM UTC”,基本上覆盖用户的时区。我改变了我的javascript,总是将日期转换为UTC格式,一切似乎都按照我的愿望进行。而且,没有什么可以阻止我在将来在用户的本地时间中显示日期。