我正在编写一些代码来处理时区,所以很自然地,我已经度过了糟糕的一天。特别是,我真的很难获得时区的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
在哪里?如果无法使用它,是否有其他方法可以获取此信息?
答案 0 :(得分:0)
“诀窍”是您不直接引用mscorlib
,而是引用由System.Runtime
的依赖项引入的Microsoft.NETCore.App
。 System.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.0
和release/1.1.0
都不包含GetAdjustmentRules()
的定义,但master
分支确实如此,您可以期望该方法在.NET中可用核心1.2。
只需使用netstandard2.0
定位NETStandard.Library
库时,该方法也可用。 netstandard2.0
中可用的参考目前在此处:
https://github.com/dotnet/standard/tree/master/netstandard/ref