Tiempo en milisegundos desde la época en el terminal

34

¿Cómo obtengo el tiempo desde la época, en milisegundos, en el terminal OSX?

El equivalente de Linux / Ubuntu es date +%s.%N :

Linux $ date +%s.%N
1403377762.035521859

Lo que no funciona en mi terminal OSX:

OSX $ date +%s.%N
1403377800.N
    
pregunta Adam Matan 21.06.2014 - 21:10

3 respuestas

40

El programa date en OS X es diferente del programa coreutils date de GNU. Puedes instalar coreutils (incluyendo gnu-date), luego tendrás una versión de date que soporta milisegundos.

Como la instalación desde la fuente puede ser una molestia para los usuarios nativos de OS X, le aconsejo que utilice Homebrew .

Para instalar estas herramientas usando Homebrew ejecuta este oneliner en tu terminal:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew ya está instalado (es aconsejable seguir las sugerencias del instalador después de la instalación). Ahora instalaremos coreutils usando brew .

brew install coreutils

Como dice la instalación, todos los comandos se han instalado con el prefijo 'g' (por ejemplo, gdate, gcat, gln, etc, etc.). Si realmente necesita usar estos comandos con sus nombres normales, puede agregar un directorio "gnubin" a su PATH ( ~/.bash_profile ) como:

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Ahora puedes ejecutar

gdate +%s.%N

y esto generará su tiempo desde la época en milisegundos.

    
respondido por el CousinCocaine 21.06.2014 - 22:55
7

En OS X, simplemente ejecute date +%s , ya que OS X no admite más precisión que esta en la salida de date y cualquier exceso de precisión no compatible con la representación interna se trunca hacia el infinito menos.

Si desea una salida de milisegundos, puede usar el siguiente comando, aunque la salida se corrige simplemente agregando ceros en lugar de agregar precisión debido a la razón mencionada anteriormente. A continuación se muestran los milisegundos correctos en sistemas que admiten la precisión necesaria.

echo $(($(date +'%s * 1000 + %-N / 1000000')))

Fuente del comando anterior: Unix.SE - Cómo para obtener milisegundos desde la época de Unix

Si solo quieres un comando que agregue la cantidad correcta de ceros en OS X, puedes usar:

date +%s000
    
respondido por el grg 21.06.2014 - 21:13
3

esta solución funciona en macOS.

Si considera usar un script bash y tiene Python disponible, podría usar este código:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'
    
respondido por el Frank Thonig 05.02.2018 - 15:32

Lea otras preguntas en las etiquetas