Trabalhar com o Horário em muitos fusos horários às vezes é doloroso. A prática recomendada em .net é usar um tipo DateTimeOffset
integrado que contenha informações de fuso horário. Se seu aplicativo usa apenas o antigo, DateTime
você 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 DateTime
e 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 .