DATETIME início DATETIME final
Eu imploro que você use dois valores DATETIME em vez disso, rotulados como algo como event_start e event_end .
O tempo é um negócio complexo
A maior parte do mundo já adotou o sistema métrico baseado em denery para a maioria das medições, correta ou incorretamente. Isso é bom no geral, porque pelo menos todos podemos concordar que ag, é um ml, é um cm cúbico. Pelo menos aproximadamente isso. O sistema métrico tem muitas falhas, mas pelo menos é internacionalmente falho e consistente.
Com o tempo, porém, temos; 1000 milissegundos em um segundo, 60 segundos a um minuto, 60 minutos a uma hora, 12 horas para cada meio dia, aproximadamente 30 dias por mês que variam de acordo com o mês e até mesmo o ano em questão, cada país tem seu tempo deslocado dos outros , a forma como a hora é formatada varia em cada país.
É muito para digerir, mas é impossível para um cenário tão complexo ter uma solução simples.
Alguns cantos podem ser cortados, mas há aqueles em que é mais sensato não
Embora a primeira resposta aqui sugira que armazenar um número inteiro de minutos após a meia-noite possa parecer perfeitamente razoável, aprendi a evitar fazer isso da maneira mais difícil.
As razões para implementar dois valores DATETIME são para um aumento na precisão, resolução e feedback.
Tudo isso é muito útil para quando o design produz resultados indesejáveis.
Estou armazenando mais dados do que o necessário?
Pode parecer que há mais informações sendo armazenadas do que eu preciso, mas há um bom motivo para aceitar isso.
Armazenar essas informações extras quase sempre acaba me economizando tempo e esforço a longo prazo, porque inevitavelmente descubro que quando alguém é informado de quanto tempo algo demorou, ele também vai querer saber quando e onde o evento aconteceu.
É um planeta enorme
No passado, fui culpado de ignorar que existem outros países neste planeta além do meu. Parecia uma boa ideia na época, mas SEMPRE resultou em problemas, dores de cabeça e perda de tempo posteriormente. SEMPRE considere todos os fusos horários.
C #
Um DateTime é renderizado perfeitamente para uma string em C #. O método ToString (string Format) é compacto e fácil de ler.
Por exemplo
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
Servidor SQL
Além disso, se você estiver lendo seu banco de dados separado da interface do aplicativo, é agradável ler o dateTimes de relance e realizar cálculos neles é simples.
Por exemplo
SELECT DATEDIFF(MINUTE, event_start, event_end)
ISO8601 data padrão
Se estiver usando SQLite, você não tem isso, então use um campo Texto e armazene-o no formato ISO8601, por exemplo.
"2013-01-27T12: 30: 00 + 0000"
Notas:
Este usa relógio de 24 horas *
A parte do deslocamento de tempo (ou +0000) do ISO8601 mapeia diretamente para o valor da longitude de uma coordenada GPS (não levando em consideração o horário de verão ou o país).
Por exemplo
TimeOffset=(±Longitude.24)/360
... onde ± se refere à direção leste ou oeste.
Portanto, vale a pena considerar se valeria a pena armazenar longitude, latitude e altitude junto com os dados. Isso vai variar na aplicação.
ISO8601 é um formato internacional.
O wiki é muito bom para mais detalhes em http://en.wikipedia.org/wiki/ISO_8601 .
A data e a hora são armazenadas na hora internacional e o deslocamento é registrado dependendo de onde no mundo a hora foi armazenada.
Na minha experiência, sempre há a necessidade de armazenar a data e a hora completas, independentemente de eu achar que há quando eu começo o projeto. ISO8601 é uma maneira muito boa e à prova de futuro de fazer isso.
Conselhos adicionais grátis
Também vale a pena agrupar eventos como uma cadeia. Por exemplo, se registrar uma corrida, todo o evento pode ser agrupado por piloto, corrida_circuito, pontos de verificação de circuito e voltas_circuito.
Na minha experiência, também é aconselhável identificar quem armazenou o registro. Como uma tabela separada preenchida por meio do gatilho ou como uma coluna adicional na tabela original.
Quanto mais você investe, mais você ganha
Eu entendo perfeitamente o desejo de ser o mais econômico possível com espaço, mas raramente o faria à custa de perder informações.
Uma regra prática com bancos de dados é, como o título diz, um banco de dados só pode dizer o quanto tem dados para, e pode ser muito caro voltar aos dados históricos, preenchendo lacunas.
A solução é acertar na primeira vez. Certamente é mais fácil falar do que fazer, mas agora você deve ter uma visão mais profunda do design de banco de dados eficaz e, subsequentemente, ter uma chance muito maior de acertar da primeira vez.
Quanto melhor for o seu projeto inicial, menos custosos serão os reparos mais tarde.
Só digo isso porque, se pudesse voltar no tempo, é o que diria a mim mesmo quando chegasse lá.