我需要从时区检索夏令时的信息(开始日期和结束日期)。
您可以使用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
答案 0 :(得分:1)
如您所见,TimeZoneInfo
除了直接转换单个瞬间外,并没有真正直接暴露出很多东西。可以使用任何特定时区的规则(通过TimeZoneInfo.GetAdjustmentRules
,但是很难准确地使用它们。
Noda Time project 确实公开了以下信息:您向时区询问在起点和终点之间使用的“区域间隔”的顺序(通过DateTimeZone.ZoneIntervals
)。除了进出DST之外,还可以有其他转换;例如,时区的标准偏移量可以更改。返回的区域间隔涵盖了您要求的时间间隔。
Noda Time主要用于与IANA时区配合使用,但是您也可以在完整的.NET Framework版本中使用Windows时区(目前不在.NET Core版本中使用)。
如果您想要一个代码示例,请告诉我-如果您不能使用Noda Time,则编写该示例没有多大意义。