0

我正在尝试将我的日期值以 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");
4

1 回答 1

0

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

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

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

于 2013-01-09T11:15:59.930 回答