Come ottengo il tempo dall'epoca, in millisecondi, nel terminale OSX?
L'equivalente Linux / Ubuntu è date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Che non funziona nel mio terminale OSX:
OSX $ date +%s.%N
1403377800.N
Come ottengo il tempo dall'epoca, in millisecondi, nel terminale OSX?
L'equivalente Linux / Ubuntu è date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Che non funziona nel mio terminale OSX:
OSX $ date +%s.%N
1403377800.N
Risposte:
Il date
programma in OS X è diverso dal date
programma coreutils di GNU . Puoi installare coreutils (incluso gnu-date), quindi avrai una versione date
che supporta millisecondi.
Poiché l'installazione da sorgenti può essere una seccatura per gli utenti nativi di OS X, ti consiglio di usare Homebrew .
Per installare questi strumenti usando Homebrew esegui questo oneliner nel tuo terminale:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew è ora installato (è consigliabile seguire i suggerimenti dell'installatore dopo l'installazione). Ora installeremo coreutils usando brew
.
brew install coreutils
Come dice l'installazione, tutti i comandi sono stati installati con il prefisso 'g' (ad es. Gdate, gcat, gln, ecc ecc). Se hai davvero bisogno di usare questi comandi con i loro nomi normali, puoi aggiungere una directory "gnubin" al tuo PATH ( ~/.bash_profile
) come:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Ora puoi correre
gdate +%s.%N
e questo produrrà il tuo tempo dall'epoca in millisecondi.
date
diventa GNU date
(invece di gdate)
+%s.%N
formato dà i secondi alla precisione dei nanosecondi, non ai millisecondi. Dopo aver usato brew per l'installazione gdate
, ho controllato la manpage per vedere se erano disponibili millisecondi. Non è. Inoltre non ha detto che si %N
potesse specificare una precisione per , ma l'ho provato comunque. Ho scoperto che il comando per ridurre i secondi alla precisione in millisecondi (ovvero tre posizioni decimali) è gdate +%s.%3N
.
In OS X, esegui semplicemente date +%s
come OS X non supporta una precisione maggiore di questa date
nell'output e qualsiasi precisione in eccesso non supportata dalla rappresentazione interna viene troncata verso meno infinito.
Se si desidera un output in millisecondi, è possibile utilizzare il comando seguente, anche se l'output viene corretto semplicemente aggiungendo zeri anziché aggiungendo precisione a causa del motivo di cui sopra. Di seguito vengono emessi millisecondi corretti su sistemi che supportano la precisione necessaria.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Fonte per il comando precedente: Unix.SE - Come ottenere millisecondi dall'epoca di Unix
Se vuoi solo un comando che accosti il giusto numero di zeri in OS X, puoi usare:
date +%s000
%-N
, quindi non fa nulla (e potrebbe causare problemi se la variabile di shell $N
è impostata). Basta usare date +%s000
(o date +%s.000
se si desidera il punto decimale).
date
comando di OS X passa %-N
come N
, può interferire con il calcolo. Prova a impostare N=7000000000000000000
, quindi prova il comando ... In pratica questo è un caso improbabile, ma mi sentirei più sicuro con qualcosa che non dipende dall'ambiente.
questa soluzione funziona su macOS.
se consideri l'utilizzo di uno script bash e disponi di python disponibile, puoi usare questo codice:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
Oppure scrivi python
direttamente uno script:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdate
stato installato/usr/local/bin/gdate
.