Qual è un modo intelligente per contare il numero di giorni trascorsi da X?


11

Ho iniziato a lavorare nella mia posizione attuale dal 17 novembre 2014. Vorrei sapere da quanti giorni sono passati. Qualche idea su come usare Linux per trovare una soluzione semplice e piacevole?


Ho finito per fare qualcosa di simile in uno script perl; Ho usato la funzione timelocal () per ottenere il numero di secondi dall'epoca alla data specificata (ad esempio il 17 novembre 2014), quindi ho sottratto quello dall'attuale data-in-secondi dell'epoca, quindi diviso per 86400 (secondi in un giorno). Sono sicuro che qualcuno troverà una soluzione solo per shell :)
Jeff Schaller

2
L'aritmetica del tempo ha molti casi difficili. Mentre cose semplici come la sottrazione di timestamp UNIX e la divisione per 86.400 ti daranno una risposta approssimativa, stai meglio usando una libreria temporale specializzata che tenga conto dei casi speciali, ad esempio di Python dateutil.
Reid,

1
Alcune delle risposte in Calcolo rapido delle differenze di data potrebbero essere utili anche qui.
arte


@ msh210 vieni bandito a vita e condannato al carcere per 1 mese mentre servi la comunità come pulitore di codice per l'antico codice COBOL.
ychaouche,

Risposte:


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

4
Questo fa saltare i secondi sbagliati. Voglio dire, ora non importa quasi , ma tra circa 10k anni o giù l'errore accumulato potrebbe essere abbastanza importante.
Kevin,

2
I secondi di salto di probabilità genereranno un errore in circa .000001%. Questo è trascurabile rispetto al numero errato di giorni che questo metodo fornirà con i locali in cui si osserva l'ora legale: 2% dei casi ...
jlliagre

2
@Kevin: Se vuole sapere per quanti giorni ha lavorato da qualche parte, non possiamo (fino a ulteriore progresso nella criogenizzazione o in medicina) non preoccuparci troppo di questo ^^
Olivier Dulac,

1
@jlliagre:% s è l'ora di Unix, che è sempre UTC, a cui manca l'ora legale.
Kevin,

1
È probabile che si chiederà il numero di giorni trascorsi mentre è inattivo dietro la sua scrivania al lavoro. Dato che probabilmente non è intorno a mezzanotte ma da qualche parte tra le 8:00 e le 17:00 (e date -d 2014/11/17dà un timestamp di mezzanotte perché non c'è tempo menzionato) DST non importa.
wurtel,

5

Bene, a prima vista:

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

In uno script (non molto efficiente, ma ... forse gestisce i secondi bisestili?;))

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"

Anche agosi capisce:date --date="239 days ago"
Digital Trauma,

1
@DigitalTrauma peccato che non sia localizzato. Ad esempio, LC_ALL=ru_RU.utf8 date --date="239 дней назад"mi dà lo stesso risultato di date --date="239".
Ruslan,

@Ruslan infatti :)
Digital Trauma,

1

Ho provato Python dalla riga di comando.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.