我如何使用timezoneinfo . getadjustmenrules()在.net核心

本文关键字:net 核心 getadjustmenrules 何使用 timezoneinfo | 更新日期: 2023-09-27 18:15:31

我正在编写一些代码来处理时区,所以很自然,我已经度过了糟糕的一天。特别是,我一直在努力获得时区的夏令时调整规则。根据TimeZoneInfo的源代码,应该有一个名为.GetAdjustmentRules()的实例方法。这是2015年初写的

然而,这个控制台应用程序不能针对。net标准1.6进行编译。

using System;
public class Program {
    public static void Main() {
        var tz = TimeZoneInfo.Local;
        Console.WriteLine(tz.GetAdjustmentRules());
    }
}

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

事实上,当我通过反射检索方法列表时,我发现没有一个叫做.GetAdjustmentRules()的。有趣的是,是一个名为m_adjustmentRules的私有成员,我可以使用它。

但是.GetAdjustmentRules()在哪里?如果没有办法使用它,还有别的方法可以得到这个信息吗?

我如何使用timezoneinfo . getadjustmenrules()在.net核心

"诀窍"是你不直接引用mscorlib,你引用System.Runtime,这是由Microsoft.NETCore.App的依赖关系拉进来的。System.Runtime的目的是抽象出实际实现所有System.*对象的东西。CoreCLR在mscorlib中有实现,调用被转发给它。例如,CoreCLR运行时在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 Core 1.2中可用。

对于使用NETStandard.Library的库,仅以netstandard2.0为目标时,该方法也可用。netstandard2.0中可用的参考资料目前在这里:https://github.com/dotnet/standard/tree/master/netstandard/ref