根据用户的时区显示 UTC 时间
本文关键字:显示 UTC 时间 时区 用户 | 更新日期: 2023-09-27 17:55:32
我有一些来自 SharePoint 的日期时间值。SharePoint 以 UTC 格式存储所有时间。因此,在向用户显示时,我使用此代码将 UTC 时间转换为本地时区 -
internal static DateTime? ConvertTimeFromUtc(DateTime? utcTime)
{
if (utcTime.HasValue)
{
return TimeZoneInfo.ConvertTimeFromUtc(utcTime.Value, TimeZoneInfo.Local);
}
return null;
}
我说的对吗,这将根据托管Web应用程序的服务器的时区返回时间?
目前,我们的生产服务器位于英国,用户也位于英国。因此,上面的代码将正常工作。
但展望未来,生产服务器甚至用户都可以在世界任何地方。我该怎么做才能使其无错误以供将来增强?
我是否需要使用 javascript 查找当前用户的时区,将该信息保存在会话中,然后在显示任何日期时间值时使用此信息?
谢谢!
TimeZoneInfo
类可用于管理您的时区需求。
假设您可以在客户端获取与TimeZoneInfo
使用的Id
值对应的字符串(这些值又直接来自Windows注册表,但旨在匹配时区的标准化英文名称),那么您可以使用TimeZoneInfo.FindSystemTimeZoneById
查找正确的对象,并使用例如ConvertTimeFromUtc
方法转换为本地时间进行显示。
我没有使用过它,但还有野田时间库来处理您所有的日期/时间管理需求。JavaScript 的一个类似的库是 Moment.js,如果(看起来)你有一个 JavaScript 客户端并希望在客户端代码中处理本地时间,它可能很有用。
我不熟悉 JavaScript,但我认为它有一些对时区的内置支持,当然至少有一个库可以这样做。
如果是我,我会尝试在客户端处理所有本地时区问题。 即您的服务器端代码根本不应该关心本地时区。最多,如果您希望用户能够覆盖其工作站上的本地时区,则可以存储该设置并在以后将其交还给客户端。但是客户端代码应该转换为本地时间(或用户选择的"本地"时区)。