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

问题描述 投票:0回答:2

我正在编写一些代码来处理时区,所以自然地,我已经度过了糟糕的一天。特别是,我一直在努力获取时区的 DST 调整规则。根据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”不包含“GetAdjustmentRules”的定义,并且找不到接受“TimeZoneInfo”类型的第一个参数的扩展方法“GetAdjustmentRules”(您是否缺少 using 指令或程序集引用?) timezonecore..NETCoreApp ,版本=v1.0

事实上,当我通过反射检索方法列表时,我发现没有一个叫

.GetAdjustmentRules()
。有趣的是,有 is 一个名为
m_adjustmentRules
的私人成员,我也许可以使用它。

但是

.GetAdjustmentRules()
在哪里?如果没有办法使用它,还有其他方法可以获取这些信息吗?

c# visual-studio-2015 .net-core
2个回答
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 Core 1.2 中可用。

当仅针对使用

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


0
投票

我使用时区的调整规则:

TimeSpan ltz = TimeZoneInfo.Local.BaseUtcOffset;
foreach (TimeZoneInfo.AdjustmentRule ar in TimeZoneInfo.Local.GetAdjustmentRules())
{
    if (ar.DateStart < DateTime.Now && ar.DateEnd > DateTime.Now)
    {
        ltz += ar.DaylightDelta;
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.