O que é a época do Unix e quando foi a época do Unix?

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 se dar conta. Depois de entender o tempo Unix, no entanto, você o verá em muitos contextos. Diversas 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 é tão grande. 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 em relação a 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. Normalmente, também é 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? São 00:00:00 UTC do dia 1º de janeiro de 1970 . Isso geralmente é conhecido como Unix Epoch. Os programadores escolheram esta data para a época por conveniência, pois 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, entretanto, 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, geralmente 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 de 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 é necessário 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 do Y2K ( um dos piores erros de programação da história ) afetou sistemas de computador que armazenavam anos como valores de dois dígitos. Quando chegou o ano 2000, esses sistemas o trataram como se fosse 1900. No caso, não foi tão catastrófico quanto se temia, principalmente porque muitas pessoas despenderam muito tempo e esforço antecipadamente, preparando-se para isso.

Se você prestou atenção na seção anterior, pode ter notado um problema semelhante que pode afetar o tempo do Unix. Bem, o tempo Unix tem um problema de dados próprio: o problema Y2k38. (É frequentemente 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 ' Vou falhar completamente.

Pelo menos esse problema não vai nos atingir ao bater da meia-noite na 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 em 2038 ou eles estarão obsoletos até então.

Alguns recursos úteis de carimbo de data / hora

O site do Epoch Converter é 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 timestamp . É mais básico, mas tem uma apresentação bem limpa e é fácil de usar.

Time.is 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.

Usando Tempo Unix com Ferramentas de Linha de Comando

No Linux e no macOS, o programa de data é 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:

 $ date
Wed Feb 10 12:28:30 GMT 2021

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

 $ date +%s
1612960114

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

 $ date -d "Jan 2 1970" +%s
82800

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

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

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

 $ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Alguns outros programas usam o formato % s para lidar com o tempo Unix. Por exemplo, se você deseja mostrar a data de modificação de um arquivo no tempo Unix, com a 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 a função time () que retorna o carimbo de data / hora Unix atual. Sua função date () leva um carimbo de data / hora como seu segundo argumento:

 $ php -r 'echo date("Ymd", time());'
2021-02-11

JavaScript aborda as coisas de uma maneira interessante. Ele tem um método Date.now () 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 fundamentos como ls , verifique nosso guia de comandos básicos do Linux.