Armazenando data / hora como UTC no banco de dados

Estou armazenando datas / horas no banco de dados como UTC e as computando dentro do meu aplicativo de volta à hora local com base no fuso horário específico. Digamos, por exemplo, que eu tenho a seguinte data / hora:

01/04/2010 00:00

Digamos que seja para um país, por exemplo Reino Unido, que observa o horário de verão (DST) e, neste momento específico, estamos no horário de verão. Quando converto essa data para UTC e a armazeno no banco de dados, ele é realmente armazenado como:

31/03/2010 23:00

Como a data seria ajustada -1 hora para o horário de verão. Isso funciona bem quando você observa o horário de verão no momento do envio. No entanto, o que acontece quando o relógio é ajustado novamente? Quando eu pego essa data do banco de dados e a converto para a hora local, esse horário específico seria visto como31/03/2009 23:00 quando, na realidade, foi processado como01/04/2010 00:00.

Corrija-me se eu estiver errado, mas isso não é um pouco de falha ao armazenar horários como UTC?

Exemplo de conversão de fuso horário

Basicamente, o que estou fazendo é armazenar a data / hora em que as informações estão sendo enviadas ao meu sistema para permitir que os usuários façam umaalcance relatório. Aqui está como eu estou armazenando a data / hora:

public DateTime LocalDateTime(string timeZoneId)
{
    var tzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
    return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi).ToUniversalTime().ToLocalTime(); 
}

Armazenando como UTC:

var localDateTime = LocalDateTime("AUS Eastern Standard Time");
WriteToDB(localDateTime.ToUniversalTime());

questionAnswers(6)

yourAnswerToTheQuestion