Получение текущего времени в часовом поясе не учитывает переход на летнее время (я думаю) - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь получить текущее время списка часовых поясов, используя NodaTime.Однако у меня проблемы с часовым поясом EST.Насколько я могу судить, он отлично работает для определения времени в ряде других часовых поясов, но «EST» кажется неправильным.

В настоящее время (на данный момент) Google говорит мне, что EST составляет 18:40.Есть ли способ, которым я могу исправить (если не сказать лучшего слова) это так, чтобы я мог получить местное время данного часового пояса на основе текущего времени UTC?

void Main()
{
    var timeZones = new List<string>()
    {
        "Africa/Abidjan",
        "Africa/Bangui",
        "Africa/Casablanca",
        "Africa/Johannesburg",
        "America/Guayaquil",
        "America/New_York",
        "America/Vancouver",
        "America/Montreal",
        "Europe/Lisbon",
        "Europe/London",
        "EST"
    };

    GetLocalTimes(timeZones).Dump();
    //Africa/Abidjan 05/05/2019 22:40:22 
    //Africa/Bangui 05/05/2019 23:40:22 
    //Africa/Casablanca 05/05/2019 22:40:22 
    //Africa/Johannesburg 06/05/2019 00:40:22 
    //America/Guayaquil 05/05/2019 17:40:22 
    //America/New_York 05/05/2019 18:40:22 
    //America/Vancouver 05/05/2019 15:40:22 
    //America/Montreal 05/05/2019 18:40:22 
    //Europe/Lisbon 05/05/2019 23:40:22 
    //Europe/London 05/05/2019 23:40:22 
    //EST 05/05/2019 17:40:22 
}

public IReadOnlyDictionary<string, DateTime> GetLocalTimes(IEnumerable<string> timeZones)
{
    var dictionary = new Dictionary<string, DateTime>();

    foreach (var timeZone in timeZones)
    {
        var utcDateTime = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc);
        var zonedDateTime = Instant.FromDateTimeUtc(utcDateTime).InZone(DateTimeZoneProviders.Tzdb[timeZone]).ToDateTimeUnspecified();

        dictionary.Add(timeZone, zonedDateTime);
    }

    return dictionary;
}

1 Ответ

2 голосов
/ 06 мая 2019

Это не проблема NodaTime, это путаница с часовым поясом.EST не меняется на летнее время.Те места, где наблюдается переход на летнее время, меняются на EDT, что составляет разницу в один час.В основном EST и EDT - это два способа отслеживания времени в восточном часовом поясе (ET).

https://en.wikipedia.org/wiki/Eastern_Time_Zone

Попробуйте вместо этого использовать America/New_York.

...