创建或获取特定的 SPTimeZone 实例

Create or get specific SPTimeZone instance

创建 Microsoft.SharePoint.SPTimeZone 的特定实例的最方便方法是什么,如下所示:

SPTimeZone utc = SPRegionalSettings.GlobalTimeZones
                                   .OfType<SPTimeZone>()
                                   .FirstOrDefault(tz => tz.Information.Bias == 0
                                                   && tz.Information.DaylightBias == 0);

这是我能得到的最好的技巧吗...

这对我来说尤其是个问题,因为我想模拟这部分代码以进行单元测试并强制它始终为 return UTC。 属性 GlobalTimeZones 似乎取决于 HttpContext.Current 或实际请求 - 我在单元测试中没有的先决条件...

N.B:我知道有 System.TimeZoneInfo 但第三方组件迫使我使用 SPTimeZone ...

为了停止讨论,我决定最终自己回答这个问题。

评论中有几个非常有用的解决方案,我想收集在这个简短的回答中:

  • 引入外观/适配器
  • MS Fakes 或其他框架
    • 对 SPTimeZone 的虚假访问
    • 创建一个假的 HttpContext
  • 使用上面问题中描述的技巧...

我自己决定使用 MSFakes 来填充整个第 3 方调用(因为无论如何我都不想测试它的行为)并填充我在我的方法中使用的 SPTimeZone 的所有属性。不幸的是,引入适配器对我来说不是一个选择,因为我必须保留(内部)API.