asp.net+;测试时区

asp.net+;测试时区,asp.net,timezone,Asp.net,Timezone,我尝试将UTC格式的日期值存储到我的SQL Server DB中,然后将它们转换为本地时间进行显示,似乎工作正常,我可以看到我存储的DB日期值不同(我假设它已经转换为UTC),在我尝试通过在日期和时间选项(任务栏中Windows时间设置的右下角)中更改它以“迁移”自己来测试不同的时区之前,检索它并显示它也是准确的。显然,尽管我改为的时区有3个小时的时差,但日期仍然保持在我自己的国家 不知何故,你能给我一些建议,告诉我如何在不同的时区测试日期显示吗 谢谢 将日期值存储到SQL Server: Da

我尝试将UTC格式的日期值存储到我的SQL Server DB中,然后将它们转换为本地时间进行显示,似乎工作正常,我可以看到我存储的DB日期值不同(我假设它已经转换为UTC),在我尝试通过在日期和时间选项(任务栏中Windows时间设置的右下角)中更改它以“迁移”自己来测试不同的时区之前,检索它并显示它也是准确的。显然,尽管我改为的时区有3个小时的时差,但日期仍然保持在我自己的国家

不知何故,你能给我一些建议,告诉我如何在不同的时区测试日期显示吗

谢谢

将日期值存储到SQL Server:

DateTime dateFrom = DateTime.Parse(startDateTime).ToUniversalTime();
DateTime dateTo = DateTime.Parse(endDateTime).ToUniversalTime();
parameters.Add(new SqlParameter("@StartDateTime", dateFrom));
parameters.Add(new SqlParameter("@EndDateTime", dateTo));
从数据库检索并显示:

DateTime date = DateTime.UtcNow.ToLocalTime();
date = DateTime.Parse(dr["StartDateTime"].ToString()).ToLocalTime();
                      litDateTimeFrom.Text = date.ToString("dd MMM yy hh:mm tt");
date = DateTime.Parse(dr["EndDateTime"].ToString()).ToLocalTime();
                      litDateTimeTo.Text = date.ToString("dd MMM yy hh:mm tt");

首先,我假设您已经更改了服务器机器上的时区信息(因为这将在
ToLocalTime
方法中使用)。如果没有,那么这就是测试首先需要做的

其次,您是否在更改系统时区后尝试重新启动IIS(或web应用程序)?这是必要的,因为时区信息可以缓存在.NET framework中(在
TimeZoneInfo
类中)

说了这么多,对我来说,这毫无意义。通常,时区信息需要从用户(客户机)计算机流出,因为您希望显示用户的本地时间(与其时区相关)。因此,这意味着您需要根据a)浏览器中的文化信息或b)其个人资料数据中存储的内容(可能是国家或实际时区)c)类似方案计算出当前用户的时区。一旦知道用户时区,就可以使用
TimeZoneInfo
类将UTC时间转换为相应的本地时间。

我实际上是在遵循这个示例:我非常困惑,因为我认为我可以使用.tolocaltime方法将UTC转换为本地时间,而无需注意offsettings@user415795,真的没有混乱。如果你仔细阅读你所看到的文章,作者也会这么说。他正在使用
DateTime.ToLocalTime
转换为服务器时间-确切的引用是“给定UTC时间,.NET Framework可以轻松地将其转换为服务器时间。只需使用DateTime类的ToLocalTime()方法”。服务器时间和用户的本地时间不同-您可以让两个用户在不同的时区,服务器在第三个时区,然后这三个用户的本地时间都不同。