Официальная документация DateTime.ToLocalTime гласит:
Обратите внимание, что точный вывод зависит от текущей культуры и местного часового пояса системы, в которой он запущен.
Вы можете использовать TimeZoneInfo stati c метод ConvertTimeFromUt c для преобразования экземпляра DateTime
(Примечание: если это Kind
свойство Local
вы получите исключение!) из Ut c в любое местное время, которое вы хотите (еще одно замечание: свойство Kind
результата будет Utc
или Unspecified
- в зависимости от target TimeZoneInfo
).
Пример кода (скопировано со страницы документации):
DateTime timeUtc = DateTime.UtcNow;
try
{
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
Console.WriteLine("The date and time are {0} {1}.",
cstTime,
cstZone.IsDaylightSavingTime(cstTime) ?
cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The registry does not define the Central Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.");
}