Por que as datas são calculadas a partir de 1º de janeiro de 1970?

95

Há algum motivo para usar a data (1º de janeiro de 1970) como padrão padrão para manipulação de tempo? Eu vi esse padrão em Java e também em Python. Conheço essas duas línguas. Existem outras linguagens populares que seguem o mesmo padrão?

Por favor descreva.

Vijay Shanker Dubey
fonte
1
Outra linguagem popular que segue o mesmo padrão é o PHP, um ponto de início de tempo bastante comum.
Greg K,

Respostas:

65

É o padrão do tempo Unix.

A hora Unix, ou hora POSIX, é um sistema para descrever pontos no tempo, definidos como o número de segundos decorridos desde a meia-noite do Tempo Universal Coordenado (UTC) proléptico da meia-noite de 1º de janeiro de 1970, sem contar os segundos bissextos.

soldado.moth
fonte
5
Você sabe se Kernighan e Thompson expressaram uma razão para escolher aquele momento além de "É um número redondo um pouco antes de começarmos a construir a coisa"?
dmckee --- ex-moderador gatinho
É o início do ano, está no fuso horário zero (Zulu). Ambos tornam o código de formatação de data mais simples.
Donal Fellows
28
Não conta os segundos bissextos? Eu não conhecia esse detalhe. Depois de pensar por alguns momentos, posso ver porque você faria assim, mas cara. meu mundo está destruído. por 24 segundos.
keturn
69

usando a data (1º de janeiro de 1970) como padrão padrão

A questão faz duas suposições falsas:

  • Todo o controle de tempo na computação é feito como uma contagem desde 1970.
  • Esse rastreamento é padrão.

Duas Doze Épocas

O tempo na computação nem sempre é rastreado desde o início de 1970 UTC . Embora essa referência de época seja popular, vários ambientes de computação ao longo das décadas usaram pelo menos quase duas dezenas de épocas . Alguns são de outros séculos. Eles variam do ano 0 (zero) a 2001.

Aqui estão alguns.

0 de janeiro de 1 a.C.

1 ° de janeiro, 1 DC

15 de outubro de 1582

1 ° de janeiro de 1601

31 de dezembro de 1840

17 de novembro de 1858

30 de dezembro de 1899

31 de dezembro de 1899

1 ° de janeiro de 1900

1 de janeiro de 1904

31 de dezembro de 1967

1 ° de janeiro de 1980

6 de janeiro de 1980

1 de janeiro de 2000

1 ° de janeiro de 2001

Época comum do Unix, mas não dominante

O início de 1970 é popular, provavelmente devido ao seu uso pelo Unix. Mas isso de forma alguma é dominante. Por exemplo:

ISO 8601

Assumir que uma contagem desde a época está usando a época do Unix está abrindo uma grande vulnerabilidade para bugs. Essa contagem é impossível para um ser humano decifrar instantaneamente, portanto, erros ou problemas não serão facilmente sinalizados durante a depuração e registro. Outro problema é a ambigüidade da granularidade explicada abaixo.

Eu sugiro fortemente, em vez disso, serializar os valores de data e hora como strings ISO 8601 inequívocas para intercâmbio de dados, em vez de uma contagem inteira desde a época: YYYY-MM-DDTHH:MM:SS.SSSZcomo 2014-10-14T16:32:41.018Z.

Contagem do que desde a época

Outro problema com o rastreamento de tempo de contagem desde a época é a unidade de tempo, com pelo menos quatro níveis de resolução comumente usados.

Diagrama que mostra software diferente contando de época em segundos, milissegundos, microssegundos ou nanossegundos.

Basil Bourque
fonte
1
Eu me pergunto qual é a época dominante neste momento ... você se baseou em dados?
PascalVKooten
1
@PascalVKooten Muitas épocas diferentes são usadas em muitos ambientes e sistemas de software diferentes. Portanto, não há uma época dominante. Meu objetivo aqui é nunca assumir a época. Conheça sua fonte de dados. A melhor abordagem é que uma fonte de dados evite totalmente o problema da época e use apenas strings ISO 8601, IMHO.
Basil Bourque,
1
Obrigado pela sua resposta. Eu entendo que existem muitos, mas estou curioso para saber se, por exemplo, o POSIX se tornou mais popular com o tempo.
PascalVKooten
7

porque é sempre 1º de janeiro de 1970, Porque - '1º de janeiro de 1970' geralmente chamado de "data de época" é a data em que a hora começou para computadores Unix, e esse carimbo de data / hora é marcado como '0'. Qualquer momento desde essa data é calculado com base no número de segundos decorridos. Em palavras mais simples ... o carimbo de data / hora de qualquer data será a diferença em segundos entre essa data e '1 de janeiro de 1970' O carimbo de hora é apenas um número inteiro que começou no número '0' em 'Meia-noite de 1 de janeiro de 1970' e continua aumentando por '1' a cada segundo passado Para a conversão de carimbos de data / hora UNIX em datas legíveis, o PHP e outras linguagens de código aberto fornecem funções integradas.

Friyank
fonte
5

Há alguma razão para usar a data (1º de janeiro de 1970) como padrão para manipulação do tempo?

Nenhum motivo que importa.

O timemódulo do Python é a biblioteca C. Pergunte a Ken Thompson por que ele escolheu aquela data para uma data marcante. Talvez fosse o aniversário de alguém.

O Excel usa duas épocas diferentes. Alguma razão pela qual diferentes versões do Excel usam datas diferentes?

Exceto o próprio programador, ninguém mais saberá por que esse tipo de decisão foi feito.

E...

Não importa por que a data foi escolhida. Simplesmente foi.

Os astrônomos usam sua própria data epocal: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Por quê? Uma data deve ser escolhida para que a matemática funcione. Qualquer data aleatória funcionará.

Uma data muito no passado evita números negativos para o caso geral.

Alguns dos pacotes mais inteligentes usam o proléptico Gregoriano ano 1. Alguma razão para o ano 1?
Há uma razão dada em livros como Calendrical Calculations: é matematicamente um pouco mais simples.

Mas se você pensar sobre isso, a diferença entre 1/1/1 e 1/1/1970 é apenas 1969, um deslocamento matemático trivial.

S.Lott
fonte
1
Se 1/1/1 tivesse sido escolhido, teríamos esgotado os segundos (2 ^ 31) até agora. Do jeito que está, enfrentamos um problema semelhante ao Y2K em 2038 para sistemas operacionais de 32 bits. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava
1
@Chris Nava: As pessoas que usam 1/1/1 contam dias, não segundos. 2 bilhões de dias são cerca de 5 milhões de anos. Freqüentemente, eles mantêm um par (dia, hora) para maximizar a resolução do tempo; existem apenas 86400 segundos na maioria dos dias.
S.Lott
@ S.Lott: Sim. Eu estava apenas apontando que, como a maioria dos softwares conta segundos (não minutos) desde a época, 1/1/1 era uma data de início muito distante no passado. Portanto, uma data mais recente foi escolhida como a época do computador (e, por associação, o início da revolução da TI. ;-)
Chris Nava
@Chris Nava: "most"? Suponho que por "maioria" você quer dizer "Linux". Outros sistemas operacionais não funcionam da mesma forma que o Linux. A questão é que "razoável" e "por que 01/01/1970?" não são perguntas fáceis de responder; o mais importante, a resposta não importa. "razoável" é verdade, mas não é a razão por que . A razão por que é algo que só Ken Thompson pode responder.
S.Lott,
5

1º de janeiro de 1970, 00:00:00 é o ponto zero da hora POSIX .

Benjamin Bannier
fonte
2

P) "Por que as datas são calculadas a partir de 1º de janeiro de 1970?"

A) Tinha que ser o mais recente possível, mas incluir algum passado. Provavelmente não havia outro motivo significativo, pois muitas pessoas pensam da mesma maneira.

Eles sabiam que representava um problema se o colocassem muito no passado e sabiam que daria resultados negativos se fosse no futuro. Não houve necessidade de se aprofundar no passado, pois os eventos provavelmente ocorrerão no futuro.

Notas: Os maias, por outro lado, tiveram a necessidade de situar os acontecimentos no passado, visto que tinham o conhecimento de muito do passado, para o qual fizeram um calendário de longo prazo. Apenas para colocar todos os fenômenos rotineiros no calendário.

O carimbo de data / hora não foi feito para ser um calendário, é uma época. E acredito que os maias fizeram seu calendário de longo prazo usando a mesma perspectiva. (o que significa que eles sabiam muito bem que não tinham nenhuma relação com o passado, eles apenas tinham a necessidade de vê-lo em uma escala maior)

Yezpahr
fonte
1

Sim, C (e sua família). É aqui que o Java também o levou.

Péter Török
fonte