我已经将时间以 utc 格式保存在 SQL 数据库中。我在网格视图上显示这些时间,但它们仍然是 UTC 格式。我想将它们转换为客户端浏览器的本地时间。问题是,虽然我可以获得仅适用于当前日期/时间的时区偏移量。如果未来的某些日期最终发生在夏令时期间,则该偏移量可能会发生变化。我对 Web 编程相对较新,但似乎我需要做的是运行一些 Javascript,因为每个条目都绑定到 gridview,该 gridview 以某种方式获取 C# datetimeoffset 对象并将其转换为本地时间。或者也许那是不可能的?
如果您有的话,这可以在服务器端完成TimeZoneInfo
目的。您可以使用静态ConvertTimeFromUtc()
method.
In C#:
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(myDbDateTime, myTimeZoneInfo);
如果服务器端没有时区,事情就会变得棘手,因为 javascript 不提供客户端的时区(除非它们在美国,即使这样也仅在某些浏览器上)。在这种情况下,最好强制用户选择当前时区并将其存储在他们的帐户中。如果向匿名用户显示,您可能应该默认以 UTC 显示,并提供一个选项来刷新所选时区。
Update
尝试自动确定用户的时区时会出现几个问题。
- 用户代理不向服务器提供时区。
- Javascript 不提供对时区的访问(有时在某些浏览器中除外)。
JavaScript 函数getTimezoneOffset()
最初听起来可能是个好主意,但由于存在多个具有相同偏移量的时区,因此这不是唯一值。许多非独特区域之间的区别在于它们实施夏令时。
示例:印第安纳州不考虑夏令时。因此,一年中有一半的偏移量与东部时间一致,而另一半的偏移量则等于中部时间。
但是,如果您的用户群主要位于美国并使用 IE、Chrome、Safari 或 Firefox,那么您可以使用toString()
上的方法Date
对象获取时区。这些浏览器以不同的方式将时区附加到日期字符串。在美国之外,并非所有浏览器都包含时区(尽管有些浏览器可能仍会显示)。
Open http://jsbin.com/onulo3 http://jsbin.com/onulo3观察:
IE8:2010 年 2 月 14 日星期日 22:12:22 美国东部时间
Chrome:2010 年 2 月 14 日星期日 22:12:22 GMT-0500(东部标准时间)
Safari:2010 年 2 月 14 日星期日 22:12:22 GMT-0500(东部标准时间)
Firefox:2010 年 2 月 14 日星期日 22:12:22 GMT-0500(东部标准时间)
通过一些解析,您现在可以确定所有美国用户的时区。对于其他人,您可以显示 UTC 时间(并附有相关通知)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)