Pergunta

Estou tendo problemas para decidir qual é a melhor maneira é tratar e armazenar medições de tempo.

Eu tenho um aplicativo que tem uma caixa de texto que permite aos usuários tempo de entrada em qualquer hh: mm: ss ou mm: ss.

Então, eu estava pensando em analisar essa string, tokenizing-lo sobre os dois pontos e criando TimeSpan (ou usando TimeSpan.Parse () e apenas adicionar um "00:" para o mm: ss caso) para minha lógica de negócios. Ok?

Como faço para armazenar isso como numa base de dados embora? Qual seria o tipo de campo ser? DateTime parece errado. Eu não quero um tempo de 0:54:12 para ser armazenado como 1901/1/1 00:54:12 que parece um pouco pobre?

Foi útil?

Solução

TimeSpan tem um Carrapatos propriedade Int64 que você pode armazenar em vez disso, e uma construtor que assume um valor Carrapatos.

Outras dicas

Eu acho que o mais simples é a entrada do usuário apenas convertido em um número inteiro de segundos. Então 54:12 == 3252 segundos, para armazenar a 3252 em seu banco de dados ou onde quer. Então, quando você precisa para exibi-lo para o usuário, você pode convertê-lo de volta.

Para períodos de menos de um dia, é só usar segundos, como outros já disseram.

Para períodos mais longos, isso depende do seu motor db. Se SQL Server, antes de 2008 versão você quer uma data e hora. É ok-você pode simplesmente ignorar a data padrão 1/1/1900 todos eles têm. Se você tiver sorte o suficiente para ter o SQL Server 2008, então há separado Data e hora tipos de dados que você pode usar. A vantagem com o uso de um tipo real de data e hora / hora é o uso da função DateDiff para comparar durações.

A maioria dos bancos de dados têm algum tipo de tempo tipo de intervalo. A resposta depende de qual banco de dados você está falando. Para o Oracle, é apenas um número de ponto flutuante que representa o número de dias (incluindo dias fracionários). Você pode adicionar / subtrair que de / para qualquer tipo DATE e você obter a resposta certa.

Como um contador inteiro de segundos (ou milissegundos conforme apropriado)

Você está recolhendo tanto o tempo de início e parada? Se assim for, você poderia usar o tipo de dados "timestamp", se seu DBMS suporta isso. Se não, apenas como um tipo de data / hora. Agora, você disse que você não quer a parte da data a ser armazenado - mas considere o caso em que o tempo vãos período da meia-noite - você começar em 23:55:01 e termina às 00:05:14, por exemplo - a menos você também tem a data lá. Há construção padrão em funções para retornar o tempo decorrido (em segundos) entre dois valores de data e hora.

Vá com números inteiros para segundos ou minutos. Segundos é provavelmente melhor. você nunca vai chutar a si mesmo por ter escolhido algo com muita precisão. Além disso, para sua interface do usuário, considere o uso de múltiplas entradas de texto que você não precisa se preocupar com o usuário realmente digitando o ":" corretamente. É também muito mais fácil adicionar outras restrições, como o minuto e segundo valores conting contendo 0-59.

e tipo int deve fazê-lo, armazená-lo como segundos e analisá-lo e para trás

http://msdn.microsoft.com/en-us/library /ms187745.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top