有没有办法获取非本地时区的夏令时信息

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

我想找到给定标准时区的等效夏令时区。这是一个代码片段:

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"
}
c# time dst
1个回答
0
投票

原因

 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.");
    }
© www.soinside.com 2019 - 2024. All rights reserved.