Перевод между поясами в C#
Сервер часто хранит время в UTC, а интерфейс показывает локальные часы. Метод TimeZoneInfo.ConvertTimeFromUtc применяет правила летнего времени целевого пояса.
Метод ждёт момент в UTC: у DateTime.UtcNow свойство Kind уже равно Utc. Если передать локальное время, вызов закончится ошибкой. Значение с Kind.Unspecified метод тоже считает UTC: у такой отметки не сказано, местное это время или всемирное.
Переведём текущий момент из UTC в локальный пояс процесса:
TimeZoneInfo local = TimeZoneInfo.Local;
DateTime utcNow = DateTime.UtcNow;
DateTime localNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, local);
Console.WriteLine(localNow.Kind); // выведет Local
Переведите фиксированный UTC-момент 2024-07-01 12:00:00 в локальный пояс и выведите год.