Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Convertendo qualquer hora de data da hora do servidor para a hora do usuário (lidando com o horário padrão e diurno)


TimeZoneInfo faz, sim. (É parte da estrutura .NET, não parte do C# - C# é apenas a linguagem que você está usando.) No entanto, não acho que seja isso que você realmente queira fazer.

Por que você está armazenando o DateTime no servidor fuso horário mesmo? Seria mais sensato armazená-lo em UTC, na maioria dos casos. Além de qualquer outra coisa, se o seu servidor estiver em um fuso horário que observa o horário de verão, você acabará com ambiguidade por uma hora por ano, quando o relógio voltar. (A mesma hora local ocorre duas vezes.)

Depois de armazená-lo como UTC, você também deve entregá-lo ao seu cliente Javascript como UTC. Enquanto você diz que tem "algum script java que me fará compensar os usuários do UTC" - isso dependerá do instante exato no tempo. Por exemplo, como estou no Reino Unido, meu deslocamento às vezes é 0 e às vezes +1 hora. Se você passar o UTC de volta para o cliente, isso poderá determinar a hora local a partir desse horário UTC. Seu servidor não pode, a menos que você consiga um preciso representação do fuso horário do cliente para o servidor, o que geralmente é uma coisa complicada de se fazer.

Novamente, o próprio C# não é relevante aqui. Não está claro qual parte da estrutura .NET você quer dizer - TimeZone ? TimeZoneInfo ? DateTime ? TimeZoneInfo tem dados históricos, mas apenas se você estiver em uma versão do sistema operacional que o suporte.

Bem, até onde você provavelmente se importa. Ele não tem tantos dados históricos quanto o TZDB, e tem algumas representações muito estranhas para a Rússia e a Namíbia, mas geralmente tem a ideia de mudanças nas regras.