我如何使用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()
在哪里?如果没有办法使用它,还有别的方法可以得到这个信息吗?
"诀窍"是你不直接引用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.0
和release/1.1.0
都没有包含GetAdjustmentRules()
的定义,但是master
分支包含了,所以你可以期待这个方法在。net Core 1.2中可用。
对于使用NETStandard.Library
的库,仅以netstandard2.0
为目标时,该方法也可用。netstandard2.0
中可用的参考资料目前在这里:https://github.com/dotnet/standard/tree/master/netstandard/ref