我正在尝试将UTC格式的日期值存储到我的SQL Server数据库中,然后将它们转换为本地时间进行显示,似乎工作正常,我可以看到我存储的数据库日期值不同(我认为它已经转换为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框架(在TimeZoneInfo
类中(。
说了这么多,对我来说,这毫无意义。通常,时区信息需要从用户(客户端(机器流出,因为您想显示用户的本地时间(与他的时区相关(。因此,这意味着你需要根据a(浏览器中的文化信息或b(他的个人资料数据中存储的内容(可能是国家或实际时区(c(类似的方案来计算当前用户的时区。一旦用户时区已知,就可以使用TimeZoneInfo
类将UTC时间转换为相应的本地时间。