Подтвердить что ты не робот

Преобразовывает ли ConvertTimeFromUtc() и ToUniversalTime() DST?

Если действует летнее время, а объект даты сохранен в базе данных (формат UTC), которую вы извлекаете, чтобы отобразить его в представлении (например, представление в asp.net-mvc).

И вы это сделаете с помощью этого метода:

public static DateTime ConvertToLocalTimeFromUtcTime(DateTime utcDate, string timeZoneId)
{
    TimeZoneInfo localZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
    DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, localZone);

    if (localZone.IsDaylightSavingTime(localTime)) 
        localTime = localTime.AddHours(1); // is this needed !?

    return localTime;
}

Вопрос в том, что TimeZoneInfo.ConvertTimeFromUtc() обрабатывает DST или вам нужно проверить это самостоятельно и либо добавить, либо вычесть X час на объект даты?

Тот же вопрос, когда вы сохраняете объект даты в базе данных, преобразовывая его в формат UTC с помощью ToUniversalTime().

4b9b3361

Ответ 1

Да. ConvertTimeFromUtc будет автоматически обрабатывать корректировки времени на летнее время, если в часовом поясе, на который вы нацеливаетесь, используется переход на летнее время.

От документация MSDN:

При выполнении преобразования метод ConvertTimeFromUtc применяет любые правила настройки, действующие в часовом поясе destinationTimeZone.

Не пытайтесь добавить дополнительный час в конвертацию. Это даст вам неправильный перевод.

Что касается DateTime.ToUniversalTime, он учитывает DST, но будьте осторожны с этим методом. Предполагается, что входное значение находится в локальном часовом поясе компьютера. Если вам просто нужно пометить его DateTimeKind.Utc, используйте вместо него DateTime.SpecifyKind.