Sou desenvolvedor profissional há cerca de seis anos. Durante esses seis anos, nunca trabalhei para uma empresa ou em um projeto que não lutasse com problemas de data e hora de alguma forma.



Quase todos os aplicativos com os quais você trabalhará requerem o uso de tempo de alguma forma, o que significa que em algum momento você terá que coletar, armazenar, recuperar e exibir datas ou horas. Não há solução mágica para lidar com datas ou horários e você nunca pode escapar da complexidade inerente que vem com nosso conceito de tempo, mas existem etapas que você pode seguir para torná-lo menos incômodo.



Nos anos em que tenho trabalhado com o tempo em diferentes linguagens de programação, descobri que o seguinte conhecimento é muito útil.

Escolhendo o formato de dados correto

A primeira etapa ao trabalhar com horários e datas é escolher uma representação para seus dados. Embora formatos diferentes possam parecer mais ou menos iguais, o formato que você escolher terá um grande impacto em como você escreve e depura seu código.

Usar um carimbo de data / hora numérico quando você precisa de uma data significará analisar o carimbo de data / hora e recuperar a data daquele, o que pode ou não ser simples dependendo do fuso horário.


5555 significado espiritual

Usar uma string personalizada para representar um período de tempo parece fácil de armazenar e manipular, mas é difícil de consultar. Além disso, o uso de qualquer tipo de representação que não seja imediatamente reconhecível pelo olho humano tornará a depuração do seu código mais difícil.

Ao escolher um formato para datas ou horas, obedeço às seguintes regras:



  1. Nunca use carimbos de data / hora numéricos. Eles são frequentemente os mais fáceis de obter por bibliotecas padrão entre várias linguagens de programação, mas eles não são legíveis por humanos e a tentação de manipulá-los é muito forte.
  2. Cumprir ISO 8601 , um padrão que define um formato para dados relacionados a data e hora. É trivial encontrar uma biblioteca para qualquer linguagem que possa lidar com as variações do ISO 8601.
  3. ISO 8601 é um padrão, mas tem muitas variações. Você deve sempre escolher a variante mais legível do ISO 8601. Isso não requer nenhum esforço extra, mas torna a depuração mais fácil.
  4. Sua string de carimbo de data / hora deve conter apenas os dados absolutamente necessários. Ao trabalhar com horários, sua string não deve conter uma data e, ao trabalhar com uma data independente de fuso horário, sua string não deve conter um fuso horário. Adicionar informações extras adiciona ambigüidade à operação de análise e à intenção dos dados para futuros desenvolvedores
  5. Ao armazenar fusos horários, sempre normalize para o mesmo fuso horário em seus carimbos de data / hora. Isso não apenas torna mais fácil para um computador classificar e processar os dados, mas também para um desenvolvedor humano.

Obedecer a essas regras não custará muito no início, mas elas tornarão sua vida mais fácil quando seu aplicativo for estabelecido e você descobrir que o uso de horários e datas não é o que você esperava.

Escolhendo a ferramenta certa

Como acontece com a maioria dos problemas em nosso setor, o manuseio de hora e data se resume a escolher a ferramenta certa para o trabalho.

É tentador usar as ferramentas da biblioteca padrão do seu idioma favorito, mas essa pode não ser a melhor escolha. Enquanto algumas bibliotecas padrão têm recursos fantásticos de data e hora (Python), outras são absolutamente lamentáveis ​​(Javascript). Usar a ferramenta errada torna muito mais difícil desenvolver recursos com base no tempo e torna mais fácil a entrada de bugs em seu aplicativo.



Uma boa biblioteca para lidar com datas e horários permitirá que você siga as 5 regras mencionadas acima. Especificamente, deve ser capaz de:

  • Analise qualquer representação de data que você possa encontrar (incluindo representações externas).
  • Saída para qualquer representação de data que você possa precisar (incluindo representações externas).
  • Manipule datas e horas adicionando ou subtraindo unidades de tempo delas.
  • Compare datas e horas.
  • Converta corretamente entre fusos horários.

É importante que sua biblioteca ofereça suporte a esses recursos, caso contrário, a tentação de tentar implementar a funcionalidade sozinho será muito alta. E só para ficar claro, se você tentar implementar qualquer uma dessas funcionalidades sozinho, falhará.

Não analise seus próprios carimbos de data / hora com expressões regulares, não adicione segundos a um carimbo de data / hora numérico porque parece um número normal e não compare datas e horas usando o operador de igualdade. Essas bibliotecas existem porque esses problemas são difíceis de resolver e reinventar a roda em seu aplicativo só vai deixá-lo com uma roda quebrada.

Abaixo, tenho algumas sugestões para bibliotecas que se enquadram nesses critérios:

Língua Biblioteca
Pitão Biblioteca Padrão
Javascript Momento e Fuso Horário do Momento
Java 8 e superior Biblioteca Padrão (java.time)
Java 7 e inferior Joda-Time
Rápido SwiftDate

Se o seu idioma não estiver listado (porque não estou familiarizado o suficiente com ele), pesquise a biblioteca de data e hora. Provavelmente, você encontrará uma boa biblioteca que fará tudo o que você precisa.

Saber sobre o tempo

O conhecimento final que tenho a compartilhar não é específico para trabalhar com datas e horários, mas é mais uma filosofia geral para nos ajudar a evitar problemas e se aplica ao manuseio de data e hora tanto quanto a qualquer outro problema de programação .

Sempre verifique suas suposições.

Abordamos cada problema apresentado com um grande corpo de conhecimento e um corpo ainda maior de suposições. Ao lidar com datas e horas, é mais importante do que nunca verificar suas suposições para garantir que elas ainda valem para o seu cenário.

Esta lista , intitulado Falsehoods Programmers Believe About Time, dá muitos exemplos excelentes que ilustram que o tempo provavelmente não é o que você pensava. Quando você está projetando ou desenvolvendo um recurso que gira em torno do tempo, eu o encorajo a pegar um parceiro e passar por esta lista garantindo que você evitou as armadilhas listadas.

Erros de tempo são notoriamente difíceis de detectar e ainda mais difíceis de testar. Se você desenvolver com essa lista em mente, poderá evitar bugs sutis que afetariam seus clientes, mas que eles podem não detectar (o pior tipo de bug!)

Fusos horários

Nenhuma discussão sobre horários ou datas estaria completa sem a menção dos fusos horários. Além de se familiarizar com as falsidades comuns listadas acima, também se familiarize com os fundamentos dos fusos horários.

Os fusos horários serão consistentemente um ponto problemático ao trabalhar com o tempo, mesmo se você achar que os tem 'tudo planejado'. Ter um pouco de conhecimento sobre fusos horários o ajudará a centrar seu pensamento e a garantir que você não cometa nenhum erro de lógica ao manipular os horários.

Infelizmente, não há como evitar completamente a dificuldade de armazenar e manipular horários e datas durante a programação. Mas se você seguir essas etapas e trabalhar com esse conhecimento em mente, poderá tornar a tarefa mais fácil reduzindo a quantidade de código que precisa escrever e forçando-se a adotar paradigmas que são menos prováveis ​​de causar problemas.

Compartilhe Com Os Seus Amigos: