74 votes

Temps en millisecondes depuis l'époque dans le terminal

Comment obtenir le temps depuis l'époque, en millisecondes, dans le terminal OSX ?

L'équivalent Linux/Ubuntu est date +%s.%N :

Linux $ date +%s.%N
1403377762.035521859

Ce qui ne fonctionne pas dans mon terminal OSX :

OSX $ date +%s.%N
1403377800.N

83voto

CousinCocaine Points 9430

El date sous OS X est différent du programme coreutils de GNU. date programme. Vous pouvez installer coreutils (y compris gnu-date), vous aurez alors une version de date qui supporte les millisecondes.

Comme l'installation à partir de la source peut s'avérer fastidieuse pour les utilisateurs natifs d'OS X, je vous conseille d'utiliser Homebrew .

Pour installer ces outils en utilisant Homebrew exécutez cet oneliner dans votre terminal :

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

Homebrew est maintenant installé (il est sage de suivre les suggestions de l'installateur après l'installation). Maintenant nous allons installer coreutils en utilisant brew .

brew install coreutils

Comme le dit l'installation, toutes les commandes ont été installées avec le préfixe 'g' (par exemple gdate, gcat, gln, etc etc). Si vous avez vraiment besoin d'utiliser ces commandes avec leurs noms normaux, vous pouvez ajouter un répertoire "gnubin" à votre PATH ( ~/.bash_profile ) comme :

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

Vous pouvez maintenant exécuter

gdate +%s.%N

et cela donnera votre temps depuis l'époque en millisecondes.

3 votes

Joli. Je n'ai même pas eu à ajouter le chemin, gdate a été installé dans /usr/local/bin/gdate .

0 votes

C'est ce à quoi on peut s'attendre. Tous les binaires sont installés avec le préfixe g. Dans le chemin que j'ai fourni tous les mêmes gnu-coreutils sont sans le préfixe g. Donc si vous l'ajoutez dans votre chemin comme PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" il remplacera les originaux. Donc OS X date devient GNU date (au lieu de gdate)

0 votes

C'est bien que ça ait marché.

29voto

ernix Points 281

Perl est omniprésent.

$ perl -MTime::HiRes=time -e 'printf "%.9f\n", time'
1557390839.244920969

4 votes

Réponse sous-estimée

25voto

grg Points 181593

Sous OS X, il suffit d'exécuter date +%s car OS X ne prend pas en charge une plus grande précision que celle-ci dans les données de l'ordinateur. date et tout excès de précision non supporté par la représentation interne est tronqué vers moins l'infini.

Si vous voulez une sortie en millisecondes, vous pouvez utiliser la commande suivante, bien que la sortie soit simplement corrigée en ajoutant des zéros plutôt qu'en ajoutant de la précision pour la raison mentionnée ci-dessus. La commande suivante affiche des millisecondes correctes sur les systèmes qui supportent la précision nécessaire.

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

Source pour la commande ci-dessus : Unix.SE - Comment obtenir les millisecondes depuis l'époque d'Unix ?

Si vous voulez simplement une commande qui ajoute le bon nombre de zéros dans OS X, vous pouvez utiliser :

date +%s000

2 votes

OS X ne prend pas en charge %-N donc cela ne fait rien (et pourrait causer des problèmes si la variable shell $N est définie). Il suffit d'utiliser date +%s000 (ou date +%s.000 si vous voulez le point décimal).

0 votes

@Gordon Oui, je l'ai mentionné, mais si le PO cherche une solution portable qui fonctionne avec succès sur les systèmes qui sont capables de cette précision, la commande ci-dessus fonctionne. Bien sûr, vous pourriez simplement ajouter des zéros à la sortie, mais copier cela sur d'autres systèmes qui peuvent supporter la précision supplémentaire ne serait pas idéal.

0 votes

Ah, je vois. Mais comme l'OS X date passe juste %-N à travers comme N il peut interférer avec le calcul. Essayez de régler N=7000000000000000000 puis essayez la commande... C'est un cas peu probable en pratique, mais je me sentirais plus en sécurité avec quelque chose qui ne dépend pas de l'environnement.

8voto

Frank Thonig Points 61

Cette solution fonctionne sur MacOS.

si vous envisagez d'utiliser un bash script et que vous disposez de Python, vous pouvez utiliser ce code :

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'

Ou écrire un python script directement :

#!/usr/bin/python

from time import time
print int(round(time() * 1000))

1 votes

Ce qui précède ne fonctionne qu'avec Python 2. L'exécuter avec Python 3 provoque une erreur. Si vous utilisez la fonction print() au lieu de la fonction print il fonctionnera avec les deux versions : python -c 'from time import time; print(int(round(time() * 1000)))' Cela vous permet d'utiliser l'outil commun python sans avoir à se préoccuper de savoir s'il s'agit d'un chemin pour Python version 2 ou version 3.

0 votes

Belle trouvaille @CoryGross. merci de partager.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X