我想找到给定标准时区的等效夏令时区。这是一个代码片段:
protected DateTime ConvertTimeZoneFromUTC(DateTime dateTime) {
//dateTime is utc
var dateUtc = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
var currentTimeZone = "";
//The user's timezone name is stored in WindowsTimeZoneName e.g. "US Mountain Standard Time"
var convertTimeZoneFromUTC = TimeZoneInfo.ConvertTimeFromUtc(dateUtc, TimeZoneInfo.FindSystemTimeZoneById(WindowsTimeZoneName));
if (TimeZoneInfo.Local.IsDaylightSavingTime(convertTimeZoneFromUTC))
{
//Is there a way to get IsDaylightSavingTime for the non local timezone?
//For me TimeZoneInfo.Local is "Eastern Daylight Time"
currentTimeZone = TimeZoneInfo.Local.DaylightName; //I would like to get "US Mountain Daylight Time" for the user's timezone
}
convertTimeZoneFromUTC = TimeZoneInfo.ConvertTimeFromUtc(dateUtc, TimeZoneInfo.FindSystemTimeZoneById(currentTimeZone)); //Would like to convert to "US Mountain Daylight Time"
}
原因
var convertTimeZoneFromUTC = TimeZoneInfo.ConvertTimeFromUtc(dateUtc, TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"));
不调整夏令时的原因是“美国山地标准时间”仅适用于亚利桑那州,该州不使用夏令时。就我而言,我正在科罗拉多州进行测试。为了补偿夏令时,我需要指定“山区标准时间”。
为了确定指定的时区是否处于夏令时,您需要使用 FindSystemTimeZoneById 实例化 TimeZoneInfo 的实例,然后测试给定时间是否处于夏令时,如下所示:
var dateUtc = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
var currentTimeZone = "";
TimeZoneInfo localZone = TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(dateUtc, localZone);
if (localZone.IsDaylightSavingTime(localTime))
{
Console.WriteLine(localTime.ToString() + " is in daylight savings time.");
}
else
{
Console.WriteLine(localTime.ToString() + " is NOT in daylight savings time.");
}