将日期从SQL Server转换为C#,然后再转换为javascript,在美国和伦敦的Web服务器上会得到不同的结果

将日期从SQL Server转换为C#,然后再转换为javascript,在美国和伦敦的Web服务器上会得到不同的结果,c#,javascript,sql-server,asp.net-mvc,date,C#,Javascript,Sql Server,Asp.net Mvc,Date,我有一个asp.net mvc日历应用程序(使用jquery ui datepicker),我遇到了一个奇怪的情况:当我在美国web服务器上测试时,我看到了一个特定的日期,当我在伦敦web服务器上测试时,我看到了一个不同的日期(之前的日期) 详情如下: 我正在sql server中将日期存储为: 2010-09-16 00:00:00.000 然后我将其加载到C#DateTime对象中 我需要将其作为json对象的一部分传递给我的客户端javascript,因此建议我使用以下解决方案: js

我有一个asp.net mvc日历应用程序(使用jquery ui datepicker),我遇到了一个奇怪的情况:当我在美国web服务器上测试时,我看到了一个特定的日期,当我在伦敦web服务器上测试时,我看到了一个不同的日期(之前的日期)

详情如下:

我正在sql server中将日期存储为:

 2010-09-16 00:00:00.000
然后我将其加载到C#DateTime对象中

我需要将其作为json对象的一部分传递给我的客户端javascript,因此建议我使用以下解决方案:

jsonobject.Date = UnixTicks(a.Date),
其中UnixTicks是:

private static double UnixTicks(DateTime dt)
    {
        DateTime d1 = new DateTime(1970, 1, 1);
        DateTime d2 = dt.ToUniversalTime();
        TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
        return ts.TotalMilliseconds;
    }
然后在客户端使用下面的代码将其转换为javascript日期:

var d = new Date(jsonobject.Date);
有人知道为什么给了美国服务器或伦敦服务器,我会得到一个不同的日期吗。一开始,我以为是因为

 DateTime d2 = dt.ToUniversalTime();
但我把它改成:

 DateTime d2 = dt;
仍然看到了同样的问题。(在伦敦网络服务器上,日期将显示在美国网络服务器的前一天)


有什么建议吗?

如果您在数据库中存储本地时间而不是UTC,那么在转换回本地时间时,您可以获得不同的日期。在将日期提交到数据库之前,请确保将日期转换为UTC。如果您希望每个人无论在何处都能看到相同的日期,请始终返回UTC日期-不要转换回本地时间。

这肯定是本地化问题。您需要将日期时间存储在同一时区,并考虑不同的日期格式。例如,美国的2010年9月1日格式为“9/1/2010”,而英国的格式为“1/9/2010”。如果您将其视为美国日期,那么您将看到2010年1月9日。

如果您只想完全忽略时区和本地化问题,只需将日期作为字符串显示在应用程序中:

SELECT
    CONVERT(varchar(10),YourDatetimeColumn,111) AS StringDate1  --YYYY/MM/DD
   ,CONVERT(varchar(10),YourDatetimeColumn,121) AS StringDate2  --YYYY-MM-DD
    FROM ...

然后在应用程序中像常规字符串数据一样使用它们,它们不会为您更改或调整。

这并不是说我得到的是1/9版本9/1。我刚刚得到一天的假期,我把那个日期格式列为需要注意的东西。其他可能是时区、其中一台机器上的时间不正确或夏令时。我知道夏时制在几年前是一种痛苦,当时美国改变了日期,而英国没有。我基本上想完全消除任何时间的使用。我只想从头到尾地处理这个日期。这样做有什么好处吗?我应该转换成字符串吗?我知道你在说什么,但我真的不知道为什么没有自己测试和调试的能力,日期会变得不同。如果像你建议的那样使用字符串,问题肯定会消失(但你仍然需要注意日期格式的差异——我会使用类似“2010年1月1日”的格式)。我在“2010年3月14日”格式化为字符串,问题就消失了。你是说在javascript端还是在C#端这样做?这取决于你想要什么。如果希望每个人都能看到相同的日期,请确保将日期存储为UTC,并在json中发送时将其显示为UTC而不进行转换。这可能意味着您必须在进入数据库的过程中转换为UTC,具体取决于这些日期的输入方式。我很困惑。我有一个日期是2010年11月19日。我对处理时间没有任何兴趣,因此UTC或时区。我为什么不能前后保持相同的日期呢。也许只是作为字符串传递???@ooo:您可以通过处理短日期时间格式来绕过这个问题,但我没有专门尝试过,所以我不能确定。我不会将日期存储为字符串,否则当您必须将日期转换回日期时,最终会再次遇到此问题。我在“2010年3月14日”将日期格式化为字符串,问题就消失了