【发布时间】:2023-03-11 23:08:01
【问题描述】:
在夏令时转换期间,时钟会向前移动,因此该特定时区的特定日期不会存在特定小时。
.NET 中是否有一种简单的方法可以确定一个时区是否存在一个小时?
我发现的唯一方法是尝试将一小时转换为 UTC,并检查异常:
public bool IsValidTime(DateTime date, TimeZoneInfo tzi)
{
try
{
date = DateTime.SpecifyKind(date, DateTimeKind.Unspecified);
TimeZoneInfo.ConvertTimeToUtc(date, tzi);
return true;
}
catch
{
return false;
}
}
所以运行这样的东西会返回 false:
var date = new DateTime(2020, 3, 8);
var tzi = TimeZoneInfo.FindSystemTimeZoneById("Cuba Standard Time");
var isValid = IsValidTime(date, tzi);
有没有内置的方法可以做到这一点,不那么混乱?
【问题讨论】: