我有一个asp.net mvc日历应用程序(使用jquery数据报警器),我遇到了一种奇怪的情况,当我在美国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;
仍然看到了同样的问题。(在伦敦web服务器上,日期将在美国web服务器前1天显示)
有什么建议吗?
发布于 2010-08-27 16:00:41
如果您将本地时间存储在数据库中而不是UTC中,那么在转换回本地时间时可以得到不同的日期。在将日期提交到数据库之前,请确保将日期转换为UTC。如果您希望每个人总是看到相同的日期,无论他们在哪里,始终返回UTC日期-不要转换回当地时间。
发布于 2010-08-27 16:06:22
这绝对是本地化的问题。您需要将您的DateTime存储在相同的时区中,并说明不同的日期格式。例如,2010年9月1日在美国被格式化为"9/1/ 2010“,而在英国被格式化为"1/9/2010”。如果你认为这是一个美国约会,你将看到2010年1月9日。
发布于 2010-08-27 17:56:30
如果您只想完全忽略时区和本地化问题,只需将日期显示为应用程序的字符串:
SELECT
CONVERT(varchar(10),YourDatetimeColumn,111) AS StringDate1 --YYYY/MM/DD
,CONVERT(varchar(10),YourDatetimeColumn,121) AS StringDate2 --YYYY-MM-DD
FROM ...
然后在应用程序中像常规字符串数据一样使用它们,它们不会为您更改或调整。
https://stackoverflow.com/questions/3586006
复制相似问题