Eu tenho a data (GNU coreutils) 7.1 instalada no meu sistema.
Se eu tentar verificar datas anteriores a 14 de dezembro de 1901, recebo um erro de "data inválida". Por exemplo,
$ date -d 1901-12-13
date: invalid date `1901-12-13'
$ date -d 1901-12-14
Sat Dec 14 00:00:00 EST 1901
O que devo fazer para tornar date
válido o utilitário para tratar anos anteriores a 1901?
Recebo erros semelhantes para datas após 19 de janeiro de 2038
shell-script
date
Jasdeep Singh
fonte
fonte
Respostas:
Boa pergunta.
A documentação diz que deve ser permitido.
Você está em um sistema de 32 bits?
Você também recebe um erro nas datas após 2038-01-20, por exemplo
Nesse caso, parece que a data do GNU está usando um valor de tempo de 32 bits.
Não tenho certeza de como você pode corrigir isso, usando um sistema de 64 bits ou uma ferramenta diferente, por exemplo, DateTime em Perl ou datetime em Python.
Alguns antecedentes:
Os tempos Unix contam o número de segundos a partir de 1º de janeiro de 1970, usando um valor inteiro. Se o sistema usar números inteiros de 32 bits, ele poderá contar apenas 2,1 bilhões de segundos para a frente (até 2038-01-19 03:14:02 UTC) e 2,1 bilhões de segundos para trás (em 1901-12-13 20:45:52 UTC).
Mais informações em:
fonte
uname
comando, exceto pelo fato de ele dizer que é uma máquina i686, que eu presumo serem máquinas de 32 bits. Quanto ao problema 2038, sim, esse problema existe no servidor remoto. Mais uma vez obrigado pela sua contribuição! Muito apreciado!!Seu sistema (ou pelo menos essa versão da data ) provavelmente está usando um valor de tempo interno de 32 bits.
A época do Unix (valor de tempo zero) é 1970-01-01 00:00:00 UTC. Este ponto de partida coloca 1901-12-13 00:00 EST fora do intervalo de um valor de tempo assinado de 32 bits.
1901-12-14 00:00:00 EST é -2147454000
1901-12-13 15:45:52 EST é -2147483648 (também conhecido como
INT_MIN
C, o número inteiro mínimo assinado de 32 bits)1901-12-13 00:00: 00 EST é -2147540400
Você pode tentar usar 1901-12-13 15:45:52 EST. Deveria funcionar, mas um segundo antes provavelmente falhará da mesma maneira que 1901-12-13 00:00.
fonte