Algum fato importante na história aconteceu no dia que você nasceu? E dois meses depois, houve algum?
Nesse vídeo eu vou te mostrar que as datas, algo que aprendemos a lidar desde crianças, não são tão fáceis de se compreender.
Vamos conversar sobre datas e os computadores.
Datas E Os Computadores
Vamos marcar uma reunião daqui a duas semanas?
Você aí já deve ter o dia da reunião na sua cabeça, certo?
Uma coisa que para nós é trivial, é um pouco mais complicado para uma máquina entender.
As datas e os computadores são de certa forma… incompatíveis.
As linguagens de programação possuem um objeto nativo específico que deve ser utilizado quando formos trabalhar com datas em nossos softwares.
Precisamos tomar muito cuidado ao manipular informações de data e hora, principalmente por conta da diferença de fuso.
Mas antes de falar da relação entre datas e os computadores, vamos ver…
Um Pouco De História
Se você passou dos 30, com certeza deve ter ouvido falar do meridiano de Greenwich.
Em 1884 foi criado o Tempo Universal (UT), que foi a base para o sistema de fuso horário de 24 horas que conhecemos hoje.
Na época, o Greenwich Mean Time (GMT) foi escolhido como padrão de tempo do mundo.
A linha de referência ou ponto de partida, o Prime Meridian, foi determinado como sendo uma linha imaginária que atravessa o bairro londrino de Greenwich, onde fica o Observatório Real de Greenwich.
Greenwich foi escolhido porque o telescópio que fica no observatório auxiliou na definição de sua posição.
Em 1960 o conceito de UTC (Coordinated Universal Time) foi formalizado e foi colocado em prática no ano seguinte, aposentando o GMT.
Mas porquê?
O GMT é definido pela posição do sol ou das estrelas e foi substituído pelo UTC, pelo fato do UTC ser derivado do Tempo Atômico Internacional (TAI), muito mais preciso.
Até aí tudo bem, certo? O conceito de fuso horário é utilizado amplamente no nosso dia a dia.
Agora vamos ver como um computador lida com datas.
Era UNIX
A Era UNIX começou as 00:00 do dia 1 de janeiro de 1970 UTC.
O nome vem do fato desta data ser o marco zero do sistema de calendário usado pelo sistema operacional UNIX.
O horário Unix é o número de segundos passados desde o marco zero e é utilizado em sistemas operacionais do tipo Unix bem como em outros sistemas.
Como exemplo, o objeto Date do Javascript guarda o número de milissegundos passados a partir de 01 de janeiro de 1970.
Motivação
Apesar do calendário gregoriano facilitar o raciocínio cronológico para os humanos, para as máquinas é um pouco mais complicado.
Imagine duas datas: 25 de junho de 1975 e 26 de julho de 1974. Qual delas aconteceu primeiro?
Para nós humanos isso é quase automático. Agora imagina para uma máquina.
Todos os campos precisam ser analisados independentemente para se chegar a uma conclusão.
Apesar da velocidade de um processador atual, não deixa de ser um trabalho mais complexo do que verificar se um número é maior que o outro.
Outra situação é a do início da nossa conversa. Vamos marcar uma reunião daqui a duas semanas?
Para resolver problemas do tipo e para unificar um formato de data que a Marca Temporal Unix foi criada.
É simplesmente um contador que tem o valor zero em 01/01/1970 00:00:00UTC e é incrementado a cada segundo.
Assim as datas ficam fáceis de serem manipuladas por computadores, apesar de serem ilegíveis para nós.
Bug 2038
Você já ouviu falar do bug do milênio?
Esse foi um problema mundial que aconteceu por conta da relação das datas e os computadores.
Em resumo, antigamente os computadores utilizavam duas posições para tratar e armazenar o ano de uma data qualquer.
O grande bug era: o que aconteceria quando chegássemos no ano 2000?
As datas dos computadores passariam do ano 99 para o ano 00. Havia a possibilidade dos computadores se confundirem a acharem que estavam no ano de 1900, gerando grande confusão nos sistemas mais antigos da época.
Milhões de dólares foram gastos em atualização dos sistemas que podiam sofrer deste mal.
Podemos marcar outra conversa sobre esse capítulo da história dos computadores que causou comoção em todo o mundo. Mas já vou dar um spoiler aqui: nada de grave aconteceu e nenhum avião caiu.
Se quiser saber mais sobre o bug do milênio, comenta aí embaixo!
Bom, voltando ao bug 2038.
Pois bem, formatar as datas com a marca temporal Unix resolveu um monte de coisa, mas a forma com que ela foi implementada gerou um outro problema.
O tipo de dado utilizado para armazenar a data foi um inteiro de 32 bits do tipo signed.
A última data que pode ser representado por este formato é 03:14:07 de 19 de janeiro de 2038.
Depois disso a data será representada por um número decimal negativo que pode corresponder ao ano de 1970 ou 1901, gerando erros de cálculo e de funcionamento na maior parte dos programas em execução.
Palavras Finais
O objetivo deste bate papo foi mostrar um pouco sobre a relação entre datas e os computadores.
O assunto é bastante interessante, se você quiser que eu volte ao assunto, comenta aí embaixo.
Agora estamos prontos para vermos como trabalhar com datas e colocarmos a mão na massa, ou melhor, no código.
Meu e-book Como Aprender a Programar do Absoluto Zero está GRATUITO por tempo limitado!
Olha o link: 👉🏼 http://celsokitamura.com.br/como-aprender-a-programar
Bora aprender a programar!