如何在.net核心中使用TimeZoneInfo.GetAdjustmentRules()?

时间:2016-10-28 23:24:37

标签: c# visual-studio-2015 .net-core

我正在编写一些代码来处理时区,所以很自然地,我已经度过了糟糕的一天。特别是,我真的很难获得时区的DST调整规则。根据{{​​1}}的{​​{3}},应该有一个名为TimeZoneInfo的实例方法。它写于2015年初。

但是,此控制台应用程序无法编译目标.net标准1.6。

.GetAdjustmentRules()
  

CS1061'TimeZoneInfo'不包含'GetAdjustmentRules'的定义,并且没有可以找到接受类型'TimeZoneInfo'的第一个参数的扩展方法'GetAdjustmentRules'(你是否缺少using指令或汇编引用?)timezonecore。 .NETCoreApp,版本= v1.0

事实上,当我通过反射检索方法列表时,我发现它们都没有被称为using System; public class Program { public static void Main() { var tz = TimeZoneInfo.Local; Console.WriteLine(tz.GetAdjustmentRules()); } } 。有趣的是,一个名为.GetAdjustmentRules()的私有成员,我可能会使用它。

m_adjustmentRules在哪里?如果无法使用它,是否有其他方法可以获取此信息?

1 个答案:

答案 0 :(得分:0)

“诀窍”是您不直接引用mscorlib,而是引用由System.Runtime的依赖项引入的Microsoft.NETCore.AppSystem.Runtime的目的是抽象出实际实现所有System.*对象的内容。 CoreCLR在mscorlib中有实现,并且呼叫被转发给它。例如,CoreRT运行时具有System.Private.CoreLib中的实现(其中一些是纯C#实现,即CoreCLR中的C ++ /本机方法调用)。

因此,要确定您可以在TimeZoneInfo上实际调用的内容,这是寻找1.0的地方: https://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Runtime/ref/System.Runtime.cs

分支release/1.0.0release/1.1.0都不包含GetAdjustmentRules()的定义,但master分支确实如此,您可以期望该方法在.NET中可用核心1.2。

只需使用netstandard2.0定位NETStandard.Library库时,该方法也可用。 netstandard2.0中可用的参考目前在此处: https://github.com/dotnet/standard/tree/master/netstandard/ref