GNU/Linux >> Linux Esercitazione >  >> Linux

Calcola giorni dal 1/1/1970

Soluzione 1:

ring0 mi ha battuto di qualche secondo, ma il comando completo è:

echo $(($(date --utc --date "$1" +%s)/86400))

Questo va in base all'ora UTC. Risultato:

[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

Un rapido controllo con WolframAlpha mostra che questo è il valore corretto.

Soluzione 2:

Penso che questo sia il metodo più semplice:

expr $(date +%s) / 86400

Soluzione 3:

Il date comando può darti il ​​numero di secondi trascorsi da 1970-01-01 00:00:00 UTC .

  date +"%s"

Puoi dividere il risultato per 3600*24 per ottenere il numero di giorni (UTC).

Per esempio. in Bash

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

per visualizzare il numero di giorni.

Soluzione 4:

Avevo bisogno di risolvere anche questo, ma volevo ottenere lo stesso valore per day# indipendentemente dall'ora del giorno. Con approcci come quelli mostrati qui, il valore cambierà a mezzanotte UTC anziché a mezzanotte ora locale. Questo probabilmente sembra un problema minore nell'UE o nella costa orientale degli Stati Uniti, che sono abbastanza vicini all'UTC che il valore del giorno non cambierà nel mezzo della tipica giornata lavorativa, ma, ad esempio, in California, il giorno cambia avverrebbe alle 16:00 PST, il che potrebbe essere scomodo. Immagino che gli australiani sarebbero particolarmente infastiditi dal fatto che il valore del giorno cambi in tarda mattinata.

Se vogliamo correggerlo, dobbiamo aggiungere l'offset da UTC prima di dividere per secondi/giorno. Fortunatamente, il comando date di Linux include un %z sequenza di formato che riporta l'offset dall'ora UTC. Mentre il formato standard (questo risultato è per l'ora di Denver, MDT):

$ date +%z
-0600

. . . non è direttamente utilizzabile in un calcolo, i giusti modificatori produrranno ciò che vogliamo:

$ date +%-:::z
-6

Mettilo insieme alle solite conversioni secondi/ore/giorni, e credo che quanto segue dovrebbe produrre i giorni dall'1/1/1970, con lo stesso 1/1/1970 come giorno zero e il valore che aumenta a mezzanotte ora locale:

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

Questo semplice calcolo non funzionerà per i fusi orari che non sono sfalsati dall'UTC di ore intere (ad es. India, TZ=Asia/Kolkata), poiché il "+5:30" prodotto da date +%-:::z produrrà un errore "carattere non valido nell'espressione" quando utilizzato nell'istruzione precedente.


Linux
  1. Come installare NetBeans IDE 7.1 su CentOS 6.2/6.1/6.0 / CentOS 5.7

  2. Calcola rapidamente le differenze di data?

  3. Calcolare il numero di giorni per il pagamento?

  4. Eseguire l'aggiornamento a Php 7.1/7.2 specifico da Php 7.0 in Ubuntu 16.04?

  5. calcola lo spazio su disco totale utilizzato dai file più vecchi di 180 giorni usando find

Comando Data in Linux

Installa LibreOffice 3.5 su CentOS 6.2/6.1/6.0 / CentOS 5.7

Lavorare con le colonne:Awk e Sed?

7 Esempi di comando Date in Linux

Ubuntu 22.10 Nome in codice e data di rilascio

Eliminazione di file più vecchi di 30 giorni in base al nome del file come data