361 votes

Commande pour obtenir le temps en millisecondes

Existe-t-il une commande shell sous Linux pour obtenir le temps en millisecondes ?

19 votes

date +%s.%N vous donnerait des nanosecondes, pouvez-vous travailler avec ça ?

1 votes

@Wrikken Ce n'est pas tout à fait portable cependant.

18 votes

Date + "%Y%m%d.%H%M%S%3N" - Généralement j'utilise cette commande pour obtenir la date complète et l'heure unique jusqu'aux milli secondes pour créer les noms de fichiers temporaires dans unix bash script. Si votre système n'est pas capable de supporter les milli secondes, vous pouvez passer aux micro ou nano secondes en utilisant respectivement 3 à 6 et 9.

435voto

Michael Defort Points 421
  • date +"%T.%N" renvoie l'heure actuelle en nanosecondes.

    06:46:41.431857000
  • date +"%T.%6N" renvoie l'heure actuelle avec les nanosecondes arrondies aux 6 premiers chiffres, ce qui correspond aux microsecondes.

    06:47:07.183172
  • date +"%T.%3N" renvoie l'heure actuelle avec les nanosecondes arrondies aux 3 premiers chiffres, soit les millisecondes.

    06:47:42.773

En général, chaque champ de l date peut se voir attribuer une largeur de champ optionnelle.

42 votes

%xN : belle pour la largeur du champ !

2 votes

Date + "%Y%m%d.%H%M%S%3N" pour les milli secondes.

7 votes

Je pense que c'est une meilleure réponse que celle qui est marquée comme étant la bonne.

416voto

Alper Points 2518

date +%s%N renvoie le nombre de secondes + les nanosecondes actuelles.

Par conséquent, echo $(($(date +%s%N)/1000000)) est ce dont vous avez besoin.

Exemple :

$ echo $(($(date +%s%N)/1000000))
1535546718115

date +%s renvoie le nombre de secondes depuis l'époque, si c'est utile.

89 votes

Ne fonctionne pas sur Mac OS, puisque %N n'est pas pris en charge par date

38 votes

La question porte sur la commande Linux. La réponse de @alper fonctionne bien pour la commande date avec GNU coreutils . GNUtisez votre OSX : Installer et utiliser les outils de ligne de commande GNU sur Mac OS X

93 votes

date +%s%3N est plus rapide (basé sur la réponse de @michael-defort)

100voto

fedorqui Points 42938

Nano est 10 9 et milli 10 3 . On peut donc utiliser les trois premiers caractères des nanosecondes pour obtenir les millisecondes :

date +%s%3N

De man date :

%N nanoseconds (000000000..999999999)

%s secondes depuis 1970-01-01 00:00:00 UTC

Source : Server Fault's Comment obtenir le temps Unix actuel en millisecondes dans Bash ? .

1 votes

Je suis très fier que @Peter Mortensen ait fait une de ses superbes lectures actives sur l'un de mes posts :) merci ! !!

67voto

Joshua Cook Points 2757

Sous OS X, où date ne prend pas en charge le %N je recommande d'installer coreutils en utilisant Homebrew . Cela vous donnera accès à une commande appelée gdate qui se comportera comme date sur les systèmes Linux.

brew install coreutils

Pour une expérience plus "native", vous pouvez toujours l'ajouter à vos .bash_aliases :

alias date='gdate'

Ensuite, exécutez

$ date +%s%N

19voto

Bastian Bittorf Points 337

Voici un hack portable pour Linux pour obtenir le temps en millisecondes :

#!/bin/sh
read up rest </proc/uptime; t1="${up%.*}${up#*.}"
sleep 3    # your command
read up rest </proc/uptime; t2="${up%.*}${up#*.}"

millisec=$(( 10*(t2-t1) ))
echo $millisec

La sortie est :

3010

C'est une opération très bon marché, qui fonctionne avec les internes du shell et les procfs.

1 votes

J'utilise BusyBox 1.27.1. C'est aussi la seule solution qui fonctionne.

4 votes

Le seul jusqu'à présent qui a fonctionné sur le Xeon Phi BusyBox v1.27.0 (2017-09-27 13:20:28 EDT) MicroOS - je serais heureux d'upvote trois fois !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X