Horário local para fuso horário personalizado

Trabalhar com o Horário em muitos fusos horários às vezes é doloroso. A prática recomendada em .net é usar um tipo DateTimeOffsetintegrado que contenha informações de fuso horário. Se seu aplicativo usa apenas o antigo, DateTimevocê terá mais dificuldades.

Espero que seu aplicativo esteja funcionando com valores UTC. Você trabalha com valores UTC em qualquer lugar, exceto UI. Para fins de IU, temos que escrever um pequeno método de extensão auxiliar. Este método estende DateTimee converte de UTC para o fuso horário fornecido.

public static DateTime ToLocalTime(this DateTime utcDate, string timeZoneId) {
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
var utc = new DateTimeOffset(DateTime.SpecifyKind(utcDate, DateTimeKind.Utc));
return utc.ToOffset(timeZone.GetUtcOffset(utcDate)).DateTime;
}

O timeZoneIdé um valor da propriedade TimeZoneInfo.Id .