¿Cómo obtengo el tiempo actual de Unix en milisegundos (es decir, el número de milisegundos desde la época de Unix el 1 de enero de 1970)?
232
date +%s
devolverá el número de segundos desde la época.
date +%s%N
devuelve los segundos y nanosegundos actuales.
date +%s%N | cut -b1-13
le dará la cantidad de milisegundos desde la época - segundos actuales más los tres nanosegundos restantes.
y de MikeyB - echo $(($(date +%s%N)/1000000))
(dividir entre 1000 solo lleva a microsegundos)
echo $(($(date +%s%N)/1000))
Simplemente puede usar
%3N
para truncar los nanosegundos a los 3 dígitos más significativos (que luego son milisegundos):Esto funciona, por ejemplo, en mi kubuntu 12.04.
Pero tenga en cuenta que eso
%N
puede no implementarse dependiendo de su sistema de destino. Por ejemplo, probado en un sistema integrado (buildroot rootfs, compilado usando una cadena de herramientas cruzadas de brazo no HF) no había%N
:(Y también mi tableta Android (no rooteada) no tiene
%N
).fuente
1397392146%3N
a1397392146%N
, pero el resultado de1397392146%3N
eso es lo que realmente había visto en la consola busybox de mi tableta Android. ¿Podrías explicar tu edición?date +%s.%3N
impresiones1510718281.134
.date +%N
no funciona en OS X, pero podría usar uno deruby -e 'puts Time.now.to_f'
python -c 'import time; print time.time()'
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
fuente
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Solo lanzando esto, pero creo que la fórmula correcta con la división sería:
fuente
Mi solución no es la mejor, pero funcionó para mí.
date +%s000
Solo necesitaba convertir una fecha como 2012-05-05 a milisegundos.
fuente
Para las personas que sugieren ejecutar programas externos para obtener los milisegundos ... a ese ritmo, también podría hacer esto:
El punto es: antes de elegir cualquier respuesta desde aquí, tenga en cuenta que no todos los programas se ejecutarán en un segundo entero. ¡Medida!
fuente
date
tarda 3 ms en ejecutarse.Esta solución funciona en macOS.
Si considera usar un script bash y tiene Python disponible, puede usar este código:
fuente
Si está buscando una manera de mostrar la cantidad de tiempo que se ejecutó su script, lo siguiente proporcionará un resultado (no completamente preciso):
Tan cerca como pueda del comienzo de su secuencia de comandos, ingrese lo siguiente
basetime=$(date +%s%N)
Esto le dará un valor inicial de algo como 1361802943996000000
Al final de su secuencia de comandos, use lo siguiente
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
que mostrará algo como
runtime: 12.383 seconds
Notas:
(1 * 10 ^ 09) se puede reemplazar con 1000000000 si lo desea
"scale=3"
es un entorno bastante raro que obligabc
a hacer lo que quieres. ¡Hay muchos más!Solo probé esto en Win7 / MinGW ... No tengo una caja * nix adecuada a mano.
fuente
time <script>
Aquí se explica cómo obtener tiempo en milisegundos sin realizar la división. Quizás sea más rápido ...
Actualización: Otra alternativa en pure bash que solo funciona
bash 4.2+
es la misma que la anterior, pero se usaprintf
para obtener la fecha. Definitivamente será más rápido porque ningún proceso se bifurca fuera del principal.Sin embargo, otro inconveniente aquí es que su
strftime
implementación debería ser compatible%s
y%N
que NO es el caso en mi máquina de prueba. Consulte lasman strftime
opciones compatibles. Ver tambiénman bash
para ver laprintf
sintaxis.-1
y-2
son valores especiales para el tiempo.fuente
strftime(3)
no es compatible,%N
por lo que no hay forma deprintf
imprimir nanosegundos. Estoy usando Ubuntu 14.04.date
Parece la opción más confiable.La marca de tiempo más precisa que podemos obtener (al menos para Mac OS X) es probablemente esta:
Pero debemos tener en cuenta que se necesitan alrededor de 30 milisegundos para ejecutarse. Podemos cortarlo a la escala de la fracción de 2 dígitos y, al comienzo, calcular la sobrecarga promedio de lectura del tiempo y luego eliminarlo de la medición. Aquí hay un ejemplo:
Puede descomentar los comandos de eco para ver mejor cómo funciona.
Los resultados de este script suelen ser uno de estos 3 resultados:
fuente
Usar date y expr puede llevarte allí, es decir
Solo amplíalo para hacer lo que quieras
Me doy cuenta de que esto no da milisegundos desde la época, pero aún puede ser útil como respuesta para algunos de los casos, todo depende de lo que realmente necesita, multiplique por 1000 si necesita un número de milisegundos: D
La forma más sencilla sería hacer un pequeño ejecutable (de C f.ex.) y ponerlo a disposición del script.
fuente
date
varias veces. En algunos casos, la fecha o la hora pueden cambiar entre ejecuciones a medida que se escribe su comando. Es mejor ejecutardate
una vez y analizar las partes y hacer su cálculo. Una de varias maneras de hacerlo seríat=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. Utiliza la sintaxis de Bash ya que la pregunta está etiquetada como bash . Como aludes, tu respuesta (y mi variación) solo da segundos para el día actual hasta ahora y no desde la época y no en milis.(repetir desde arriba)
date +%N
no funciona en OS X, pero podría usar también:Perl (requiere Time :: Módulo de formato). Quizás no sea el mejor módulo de CPAN para usar, pero hace el trabajo. Time :: Format generalmente está disponible con distribuciones.
fuente
date
no se puede usar y no hay comandos solo de bash que respondan a la necesidad.date
tuviera que aclarar por qué los OSX no se pueden usar como parte de su respuesta , eliminaría mi voto negativo.Poniendo todas las respuestas anteriores juntas, cuando en OSX
puedes hacer como
fuente
Si desea un cómputo transcurrido de shell simple, esto es fácil y portátil, utilizando la respuesta anterior:
fuente
Para alpine linux (muchas imágenes acoplables) y posiblemente otros entornos mínimos de linux, puede abusar de
adjtimex
:adjtimex
se usa para leer (y configurar) las variables de tiempo del núcleo. Conawk
usted puede obtener los microsegundos, conhead
usted puede usar solo los primeros 3 dígitos.No tengo idea de cuán confiable es este comando.
Nota: descaradamente robado de esta respuesta
fuente