Azure c#,javascript,sql的日期时间问题......如此困惑。

时间:2012-05-28 18:48:46

标签: asp.net json datetime timezone

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

这个想法是我可以看看这个网站,看看Bob今晚下午4-6点在芝加哥工作,而Joe在晚上8点到10点在纽约工作。这就是我想要在应用程序中显示日期的方式。如果我正在从加利福尼亚观看该网站,我仍然希望为Bob显示芝加哥时间,为Joe显示纽约时间。我不希望将这些时间转换为加利福尼亚州时间,它显示鲍勃在下午2-4点工作,而乔则在下午5-7点工作。

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

我认为这样做的原因是我使用了大量的Ajax和JSON,并且JSON要求将日期时间格式化为此/ Date(1240718400000)/,其中数字表示自纪元/ Unix时间以来的毫秒数。我在日历/周/日视图中显示日程安排,这需要进行大量的日期时间比较。

无论如何,有人知道做我需要做的事的正确方法吗?我想我需要将日期时间存储为UTC,但我还需要知道用户工作班次发生的时区,然后我需要在C#侧进行调整,但是我需要做什么在JavaScript方面?

我只是感到困惑,目前似乎有太多变数要包围我。

1 个答案:

答案 0 :(得分:0)

我认为你走在正确的轨道上。

在多个时区访问的任何Web应用程序的第一个经验法则是以UTC格式存储时间,因为以UTC格式存储日期/时间值的主要优点是它通过提供通用点来使数据可传输所有时区都偏离的参考。

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

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

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