Queremos começar a coletar fusos horários para cada um de nossos endereços no banco de dados. Qual é a melhor prática para armazenar os fusos horários? Como você adquiriu fusos horários para os registros de endereço existentes?
Estou usando o servidor Microsoft SQL, .net mvc, c #. Todas as sugestões serão muito apreciadas.
database
database-design
time
Rodney
fonte
fonte
Respostas:
Você deseja armazenar algo que não muda o tempo todo (ou duas vezes por ano). O banco de dados de fuso horário https://en.wikipedia.org/wiki/List_of_tz_database_time_zones é exatamente a coisa certa. Então você apenas armazena duas letras.
Nesse banco de dados, você pode consultar o deslocamento da hora e quando o horário de verão está ativo. Não é apenas o deslocamento de tempo, também fornece uma área; muitos lugares na mesma latitude terão códigos diferentes e podem alterar individualmente suas regras de fuso horário, e seu software poderá lidar com isso.
O único momento em que você precisa fazer alterações em seu banco de dados é quando um local muda a qual fuso horário pertence, o que seria muito raro.
fonte
A melhor prática absoluta seria usar um banco de dados que suporte o
TIMESTAMP WITH TIMEZONE
tipo de dados definido pelo SQL99.O SQL Server tem um tipo chamado
datetimeoffset
que faz tudo o queTIMESTAMP WITH TIMEZONE
pode, exceto armazenar o fuso horário real. Tudo o que você pode fazer é armazenar um deslocamento do UTC (por exemplo,2013-05-04 12:34:56 -5:00
), o que significa que você precisará determinar isso antes do armazenamento com base no fuso horário.fonte
Supondo que você esteja usando .Net framework 4.0 ou superior, TimeZoneInfo é o que você precisa.
Armazene todos os valores de data no banco de dados no formato UTC. Use o valor do ID ou o resultado de ToSerializedString () para cada cliente para criar um objeto TimeZoneInfo para converter datas armazenadas em formato local para exibição.
fonte
Você disse que deseja armazenar um fuso horário para cada endereço no seu banco de dados, mas não disse o que deseja fazer com ele. Armazenar algo em um banco de dados raramente é um fim em si.
De qualquer forma, eu usaria o banco de dados TZ , também conhecido como banco de dados Olsen, diretamente ou usando algum software de prateleira que integra o TZ. Você pode armazenar um fuso horário simplesmente como uma string para se referir a uma das entradas do TZ DB , por exemplo, 'Africa / Kampala' ou 'Europe / Paris'.
fonte