Intereting Posts
Автозапуск C # автоматически добавляет приложение в папку автозагрузки Присоединение проверки к объектам EF, используемым в controllerах / представлениях MVC? Файл не загружается на FTP-сервер на некоторых компьютерах при использовании WebClient.UploadFileAsync Использование Thread.Sleep () в службе Windows Является ли хранение hashа входа и пароля в сеансе безопасным? Невозможно связать CalendarDatePicker с моделью в Xaml UWP Добавить атрибут TypeConverter для enums во время выполнения Получить индекс элемента внутри очереди c # Пауза / возобновить stream с помощью AutoResetEvent Что эквивалентно ObjectContext.ApplyCurrentValues ​​для DbContext Как использовать код c # внутри тегов на странице asp.net? Получите CSV-данные из буфера обмена (вставленные из Excel), содержащие символы с акцентом IQueryable для объектов .Where (свойство находится в локальном массиве) Простая очередь приоритетов в C # – что будет лучше, чем List с пользовательским сортировщиком: IComparer? Любой способ получить OWIN для размещения службы SOAP?

Преобразовывает ли 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() .

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

Из документации MSDN :

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

Вы не должны пытаться добавить дополнительный час в преобразование. Это даст вам неправильный перевод.

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