Por que o Unix tem seu próprio conceito de tempo? Qual é a época e qual é o problema do Y2038?

A hora Unix é um meio de representar uma data e hora específicas, usada pelo Linux, macOS e muitos outros sistemas interoperáveis. É tão difundido que provavelmente você o está usando sem estar ciente disso. Depois de entender o tempo Unix, no entanto, você o verá em muitos contextos. Várias ferramentas podem ajudá-lo a trabalhar com o tempo Unix.

Qual é o propósito do tempo Unix?

O tempo Unix é uma contagem do total de segundos desde uma data e hora fixas. É um formato de data / hora (ou carimbo de data / hora) que parece diferente das datas e horas legíveis a que estamos acostumados. Isso é puramente por razões de eficiência. Demora muito menos espaço para armazenar um único número que representa os segundos do que para armazenar valores separados para o ano, mês, hora, etc.

Claro, em termos modernos, a diferença de espaço não é tanta. Mas considere que o Unix se originou no final dos anos 1960, quando o armazenamento disponível era muito menor. Os carimbos de data / hora também são muito usados, então seu armazenamento aumenta. Por exemplo, cada arquivo possui três carimbos de data / hora associados a ele.

instagram viewer

O formato é praticamente impossível de traduzir em sua cabeça, a menos que você seja um gênio matemático. Mas ainda tem algumas vantagens sobre alternativas mais legíveis, como Quarta, 21 de outubro de 2015 07:28:00 GMT. Você pode solicitar dois carimbos de data / hora Unix com muita facilidade. Também é geralmente mais rápido descobrir a diferença entre dois carimbos de data / hora. Isso é especialmente verdadeiro para datas próximas, como em dias adjacentes.

Sobre a época

Portanto, o tempo Unix é uma contagem total de segundos desde um ponto específico no tempo. Mas qual é esse momento? Seu 00:00:00 UTC sobre 1 de janeiro de 1970. Isso geralmente é conhecido como Unix Epoch. Os programadores escolheram esta data para a época por conveniência, uma vez que era a data mais próxima quando inventaram a hora Unix.

Você pode muito bem ter visto esta data quando algo deu errado. É claramente um bug, mas que parece muito estranho quando resulta em uma data anterior à época em que muitos de nós nascemos! É completamente compreensível, porém, quando você sabe sobre o tempo do Unix. Se algum sistema está tentando exibir um carimbo de data / hora que não tem nenhum valor, muitas vezes será convertido em 0 e resultará na data de época exata.

O formato de dados de tempo Unix

Estritamente falando, não existe um. O tipo de dados original era um número inteiro de 32 bits, e esse costuma ser o caso, mesmo em sistemas muito mais poderosos.

Este tipo de dados permite que o valor armazene um total de 2 ^ 32 segundos, o que é pouco mais de 136 anos. Esse valor normalmente é assinado, o que significa que pode ser negativo ou positivo. Portanto, geralmente representa 68 anos em cada lado da época, ou seja, 1902-2038.

Este ainda é um período limitado, é claro. Mas o uso principal do formato de carimbo de data / hora era para conceitos como modificação de arquivo. A necessidade era muito representar o tempo próximo ao presente, ao invés da história antiga ou distante no futuro. Mesmo para aplicativos como calendários, raramente há a necessidade de representar datas mais do que algumas décadas no futuro.

Mas isso não significa que esse período de tempo limitado seja sem problemas...

O Problema do Ano 2038

O Bug Y2K (um dos piores erros de programação da história) afetou os sistemas de computador que armazenavam anos como valores de dois dígitos. Quando chegou o ano de 2000, esses sistemas o trataram como se fosse 1900. No caso, isso não foi tão catastrófico quanto temia, principalmente porque muitas pessoas gastaram muito tempo e esforço antecipadamente, preparando-se para isso.

Os 10 piores erros de programação da história

Em seu passado histórico, a codificação também causou destruição. Instâncias de um pouco de código incorreto causaram desastres em um nível principal. A seguir estão 10 dos piores erros de programação da história.

Se você prestou atenção na seção anterior, pode ter detectado um problema semelhante que pode afetar o tempo do Unix. Bem, o tempo Unix tem um problema de dados próprio: o problema Y2k38. (Geralmente é referido como um problema, não um bug; talvez tenhamos nos tornado mais otimistas desde o ano de 2000!) Quando o tempo do Unix literalmente acabar em 2038, os sistemas tratarão as novas datas como 1902 ou 1970. Ou possivelmente eles simplesmente falharão completamente.

Pelo menos esse problema não nos atingirá à meia-noite da véspera de Ano Novo. O segundo final do tempo Unix de 32 bits cairá no dia 19 de março. Na eventualidade, provavelmente iremos atualizar a maioria dos sistemas até 2038 ou eles estarão obsoletos até então.

Alguns recursos úteis de carimbo de data / hora

O Conversor de época site é possivelmente o conversor de carimbo de data / hora mais abrangente disponível. Ele começa exibindo o tempo Unix atual - em tempo real - e adiciona quase todos os recursos imagináveis ​​além disso. Seu principal uso é para converter entre carimbos de data / hora e datas legíveis por humanos, em ambas as direções.

Dan’s Tools é uma enorme coleção de aplicativos úteis da web, um dos quais é um conversor de carimbo de data / hora. É mais básico, mas tem uma apresentação muito limpa e é fácil de usar.

Tempo é apresenta outro visual ainda mais minimalista. Mostra a hora em vários formatos, incluindo a hora Unix. Inclui a hora atual no título da página, o que é útil.

No Linux e macOS, o encontro O programa é o utilitário principal para lidar com data / hora, incluindo carimbos de data / hora Unix. Chamado sem nenhum argumento, ele retorna a data / hora atual em um formato legível:

$ data
Quarta-feira, 10 de fevereiro, 12:28:30 GMT 2021

Se você precisa da data / hora atual no horário Unix, use o +% s argumento:

$ date +% s
1612960114

Você pode converter de uma data legível para humanos em um carimbo de data / hora usando o -d sinalize se sua versão de encontro suporta isso. A maioria das versões do Linux deve, por padrão:

$ date -d "2 de janeiro de 1970" +% s
82800

No macOS, encontro é um programa diferente, que requer um conjunto diferente de sinalizadores:

$ date -j -f "% b% d% Y% T" "02 de janeiro de 1970 00:00:00" "+% s"
82800

Indo na outra direção, você pode converter a partir de um carimbo de data / hora Unix usando o -r bandeira:

$ data -r 1600000000
Dom 13 de setembro de 2020 13:26:40 BST

Alguns outros programas usam o % s formato para lidar com o tempo Unix. Por exemplo, se você deseja mostrar a data de modificação de um arquivo no tempo Unix, com o Versão Linux de ls, você pode usar o seguinte:

$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

Como usar o tempo Unix em linguagens de programação

PHP tem o Tempo() função que retorna o carimbo de data / hora Unix atual. Seu encontro() função leva um carimbo de data / hora como seu segundo argumento:

$ php -r 'echo date ("A-m-d", hora ());'
2021-02-11

JavaScript aborda as coisas de uma maneira interessante. Tem um Date.now () método para obter o número de milissegundos desde a época do Unix. Claro, você pode dividir isso por 1.000 e arredondar o resultado para fornecer o tempo Unix equivalente em segundos:

> Math.floor (Date.now () / 1000)
1613083012

Compreendendo o tempo Unix

O tempo Unix é um conceito simples que surge em muitos lugares. Depois de entendê-lo, você pode achar que é bastante útil, ao calcular diferenças de tempo, por exemplo. Você também pode reconhecer quando pode ser a causa de certos bugs.

Conceitos como época e carimbo de data / hora são uma parte importante da introdução ao Linux. Para saber mais sobre itens essenciais, como ls, verifique nosso guia de comandos básicos do Linux.

O email
9 comandos básicos para começar a usar o Linux

Quer se familiarizar com o Linux? Comece com esses comandos básicos do Linux para aprender as tarefas de computação padrão.

Tópicos relacionados
  • Não especificado
Sobre o autor
Bobby Jack (27 artigos publicados)

Bobby é um entusiasta da tecnologia que trabalhou como desenvolvedor de software por quase duas décadas. Ele é apaixonado por jogos, trabalha como Editor de Críticas na Switch Player Magazine e está imerso em todos os aspectos da publicação online e desenvolvimento web.

Mais de Bobby Jack

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Mais um passo…!

Confirme o seu endereço de e-mail no e-mail que acabamos de enviar.

.