Qual é uma maneira inteligente de contar o número de dias desde o X?


11

Comecei a trabalhar na minha posição atual desde 17 de novembro de 2014. Gostaria de saber quantos dias se passaram até agora. Alguma idéia de como usar o Linux para encontrar uma solução simples e agradável?


Acabei fazendo algo semelhante em um script perl; Usei a função timelocal () para obter o número de segundos da época até a data especificada (17 de novembro de 2014, por exemplo), e subtraí a da data atual da época em segundos, dividida por 86400 (segundos em um dia). Eu tenho certeza que alguém vai chegar com uma solução apenas de shell :)
Jeff Schaller

2
A aritmética do tempo tem muitos casos especiais complicados. Enquanto coisas simples, como subtrair carimbos de data e hora do UNIX e dividir por 86.400, fornecerão uma resposta aproximada, é melhor usar uma biblioteca de horários especializada que leve em consideração casos especiais, como o Python dateutil.
Reid

1
Algumas das respostas em Calcular rapidamente as diferenças de data também podem ajudar aqui.
141315 manatwork


@ msh210 você é banido por toda a vida e sentenciado à prisão por 1 mês, enquanto serve à comunidade como limpador de código do código COBOL antigo.
precisa saber é o seguinte

Respostas:


14
echo $(( (`date +%s` - `date +%s -d '2014/11/17'`) / 86400 )) days ago

4
Isso leva segundos bissextos errado. Quero dizer, isso pouco importa agora , mas em 10 mil anos ou mais o erro acumulado pode ser suficiente para importar.
Kevin

2
A probabilidade de pular segundos desencadeará um erro em cerca de 0,000001%. Esta é insignificante em comparação com o número errado de dias este método vai dar com locais onde se observa o horário de verão: 2% dos casos ...
jlliagre

2
@ Kevin: Se ele quer saber quantos dias ele trabalhou em algum lugar, nós podemos (até novo avanço na cryogenisation ou medicina) não se preocupar muito com isso ^^
Olivier Dulac

1
@jlliagre:% s é hora do Unix, que é sempre UTC, que não tem horário de verão.
Kevin

1
Provavelmente, ele estará se perguntando sobre o número de dias empregados enquanto fica ocioso atrás de sua mesa no trabalho. Como provavelmente não é por volta da meia-noite, mas entre as 8h e as 17h (e date -d 2014/11/17fornece um registro de data e hora da meia-noite, pois não há horário mencionado), o horário de verão não importa.
Wurtel

5

Bem, em face disso:

$ date --date="-239 days"
Mon Nov 17 15:25:40 CET 2014

Em um script (não muito eficiente, mas ... talvez ele lide com segundos bissextos?;))

i=0
result=""
while [ "$result" != "20141117" ]
do
    i=$((i+1))
    result=$(date --date="-$i days" +%Y%m%d)
done
echo "$i" days have passed since "$result"

Even agoé entendido:date --date="239 days ago"
Digital Trauma

1
@DigitalTrauma muito ruim, não está localizado. Por exemplo, LC_ALL=ru_RU.utf8 date --date="239 дней назад"me dá o mesmo resultado que date --date="239".
Ruslan

@Ruslan really :)
Digital Trauma

1

Eu tentei python na linha de comando.

$ python -c "import datetime; print datetime.date.today() - datetime.date(2014,11,17)"
246 days, 0:00:00 

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.