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