代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

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

  •  1
  • leora Matt Lacey  · 技术社区  · 14 年前

    详情如下:

    我在sql server中存储的日期为:

     2010-09-16 00:00:00.000
    

    我需要将其作为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;
    

    有什么建议吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Dave Swersky    14 年前

    如果您在数据库中存储本地时间而不是UTC,那么在转换回本地时间时可以得到不同的日期。确保您的日期已转换为UTC 之前

        2
  •  0
  •   Jemes    14 年前

    这绝对是一个本地化问题。您需要将日期时间存储在同一时区,并考虑不同的日期格式。例如,2010年9月1日在美国的格式是“9/1/2010”,在英国的格式是“1/9/2010”。如果你把这看作是一个美国约会,你会看到2010年1月9日。

        3
  •  0
  •   KM.    14 年前

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

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