从TimeZoneInfo获取夏令时信息

时间:2018-08-15 19:27:55

标签: c#

我需要从时区检索夏令时的信息(开始日期和结束日期)。

您可以使用TimeZone类来执行此操作,但已弃用该类,它仅返回计算机/服务器的时区。

您在TimeZoneInfo类中没有这些信息,那么如何获取它们?

例如:

var tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
Console.WriteLine(tzi.DaylightName); // I have the name but no info

var tz = TimeZone.CurrentTimeZone;
DaylightTime dst = tz.GetDaylightChanges(DateTime.UtcNow.Year);
Console.WriteLine($"DST: start {dst.Start} - end {dst.End}"); // that's what I need but for a given timezone

1 个答案:

答案 0 :(得分:1)

如您所见,TimeZoneInfo除了直接转换单个瞬间外,并没有真正直接暴露出很多东西。可以使用任何特定时区的规则(通过TimeZoneInfo.GetAdjustmentRules,但是很难准确地使用它们。

Noda Time project 确实公开了以下信息:您向时区询问在起点和终点之间使用的“区域间隔”的顺序(通过DateTimeZone.ZoneIntervals )。除了进出DST之外,还可以有其他转换;例如,时区的标准偏移量可以更改。返回的区域间隔涵盖了您要求的时间间隔。

Noda Time主要用于与IANA时区配合使用,但是您也可以在完整的.NET Framework版本中使用Windows时区(目前不在.NET Core版本中使用)。

如果您想要一个代码示例,请告诉我-如果您不能使用Noda Time,则编写该示例没有多大意义。