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.
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.
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.
Quer se familiarizar com o Linux? Comece com esses comandos básicos do Linux para aprender as tarefas de computação padrão.
- Não especificado
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.
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.