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 dateprogramma in OS X è diverso dal dateprogramma coreutils di GNU . Puoi installare coreutils (incluso gnu-date), quindi avrai una versione dateche 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.
datediventa GNU date(invece di gdate)
+%s.%Nformato 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 %Npotesse 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 +%scome OS X non supporta una precisione maggiore di questa datenell'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.000se si desidera il punto decimale).
datecomando di OS X passa %-Ncome 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 pythondirettamente uno script:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdatestato installato/usr/local/bin/gdate.