Ho bisogno di qualcosa di semplice come date
, ma in secondi dal 1970 invece della data corrente, ore, minuti e secondi.Ottieni l'ora corrente in secondi da Epoch su Linux, Bash
date
non sembra offrire questa opzione. C'è un modo semplice?
Ho bisogno di qualcosa di semplice come date
, ma in secondi dal 1970 invece della data corrente, ore, minuti e secondi.Ottieni l'ora corrente in secondi da Epoch su Linux, Bash
date
non sembra offrire questa opzione. C'è un modo semplice?
Questo dovrebbe funzionare:
date +%s
la data manpge deve essere modificata da% s secondi dal 1970-01-01 00:00:00 UTC a '% s secondi dall'epoca , 1970-01-01 00:00:00 UTC perché l'ho perso lì. – devin
Non funziona per me. data uomo non mostra% s. Devo avere una versione molto vecchia di bash (3.2.51 (1) per Solaris)? – livefree75
@ livefree75 'date' non è incorporato in' bash', quindi la tua versione di 'bash' non ha nulla a che fare con l'implementazione' date' del tuo sistema. –
solo per aggiungere. Se si desidera ottenere i secondi dall'epoca (1 gennaio 1970) per una data specifica (ad esempio, 21 ottobre 1973).
date -d "Oct 21 1973" +%s
convertire il numero di secondi indietro fino ad oggi
date --date @120024000
Il comando date
è abbastanza versatile. Un'altra cosa interessante che puoi fare con la data (copiata senza vergogna da date --help
). Mostra l'ora locale per 09:00 Venerdì prossimo, sulla costa occidentale degli Stati Uniti
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Meglio ancora, prendere un po 'di tempo per leggere la pagina man http://www.manpages.info/linux/date.1.html
Si tratta di un'estensione per quello che ha fatto @pellucide , ma per Mac:
per determinare il numero di secondi dal periodo (1 gennaio 1970) per una determinata data (ad esempio ott 21 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
Si prega di notare che per completezza, ho aggiunto la parte temporale al formato. Il motivo è che lo date
prenderà qualsiasi parte della data che gli è stata assegnata e aggiungere l'ora allo stato al valore fornito. Ad esempio, se si esegue il comando precedente alle 16:19, senza la parte '00: 00: 00 ', si aggiungerà automaticamente l'ora. Tale che "21 ottobre 1973" sarà analizzato come "21 ottobre 1973 16:19:00". Potrebbe non essere quello che vuoi.
Per convertire il timestamp di nuovo a una data:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
pagina man di Apple per l'attuazione Data: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
Finora, tutte le risposte utilizzano il programma esterno date
.
Da Bash 4.2, printf
ha un nuovo modificatore %(dateformat)T
che, quando utilizzato con l'argomento -1
emette la data corrente con il formato in dateformat
, gestito da strftime(3)
(man 3 strftime
per informazioni sui formati).
Così, per una soluzione Bash pura:
printf '%(%s)T\n' -1
o se è necessario memorizzare il risultato in una variabile var
:
printf -v var '%(%s)T' -1
Nessun programmi esterni e nessun sottoshell!
Da Bash 4.3, è ancora possibile non specificare la -1
:
printf -v var '%(%s)T'
(ma potrebbe essere più saggio dare sempre l'argomento -1
comunque).
Se si utilizza -2
come argomento anziché -1
, Bash utilizzerà il tempo di avvio della shell anziché la data corrente (ma perché lo si desidera?).
Vuoi usare' -2' se hai un lavoro più lungo (pensa a uno script per controlla i backup) e invia una mail alla fine "Backup avviato a $ somewhen completato a $ now" - che può essere eseguito con '-2' evitando di memorizzare una variabile dedicata all'inizio. –
uso questo script bash (la mia ~/bin/epoch
):
#!/bin/bash
# get seconds since epoch
test "x$1" == x && date +%s && exit 0
# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH" "[email protected]"
Con la maggior parte delle implementazioni Awk:
awk 'BEGIN {srand(); print srand()}'
Wow che è oscuro – ericslaw
Wow, dovevo dare un'occhiata a questo. Questa è una soluzione pragmatica, ma non necessariamente buona/portatile. [Sembra che le implementazioni di awk 'srand()'] (https://www.gnu.org/software/gawk/manual/html_node/Numeric-Functions.html) siano tipicamente associate alla data/ora corrente. La seconda chiamata a 'srand()' restituisce il valore precedentemente usato come seme. –
Siamo spiacenti, devo dire che questo .... '' Data non sembra offerta questa opzione. C'è un modo semplice? '' - leggi di nuovo il manuale ;-) – TheBonsai
Alcune versioni di data ce l'hanno e altre no. Quindi non è sempre presente. Ho eseguito 'type -a date' e ho usato una versione diversa e questo ha funzionato. –
FWIW, Ubuntu ha solo/bin/date, per cui la risposta di @ Steef funziona –