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.

2voto

maoyang Points 17

Un script Python comme celui-ci :

import time
cur_time = int(time.time()*1000)

4 votes

Ceci ne retournera pas le nombre de millisecondes, ceci retournera le nombre de secondes exprimé en millisecondes. Tout sera $SECONDS000

2 votes

Le code Python de @kilianc maoyang fournit des millisecondes.

1 votes

@jlliagre : Mais la résolution temporelle réelle est-elle meilleure que 16-17 ms (1/60e de seconde) ou non ?

2voto

Lorinczy Zsigmond Points 149

Perl peut être utilisé pour cela, même sur des plateformes exotiques comme AIX. Exemple :

#!/usr/bin/perl -w

use strict;
use Time::HiRes qw(gettimeofday);

my ($t_sec, $usec) = gettimeofday ();
my $msec= int ($usec/1000);

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
    localtime ($t_sec);

printf "%04d-%02d-%02d %02d:%02d:%02d %03d\n",
    1900+$year, 1+$mon, $mday, $hour, $min, $sec, $msec;

2voto

kvantour Points 11497

Lorsque vous utilisez GNU AWK depuis la version 4.1, vous pouvez charger la bibliothèque de temps et faire :

$ awk '@load "time"; BEGIN{printf "%.6f", gettimeofday()}'

Ceci imprimera l'heure actuelle en secondes depuis 1970-01-01T00:00:00 avec une précision de l'ordre de la sous seconde.

the_time = gettimeofday() Renvoie le temps en secondes qui s'est écoulé depuis le 1970-01-01 UTC sous la forme d'une valeur à virgule flottante. Si l'heure n'est pas disponible sur cette plate-forme, elle renvoie la valeur suivante -1 et mettre ERRNO . Le temps renvoyé doit être précis à la seconde près mais la précision réelle peut varier en fonction de la plate-forme. Si la norme C gettimeofday() est disponible sur cette plateforme, alors il renvoie simplement la valeur. Sinon, si sur MS-Windows, il essaie d'utiliser GetSystemTimeAsFileTime() .

source : <a href="https://www.gnu.org/software/gawk/manual/gawk.html#Extension-Sample-Time" rel="nofollow noreferrer">Manuel GNU awk</a>

Sur les systèmes Linux, la fonction C standard getimeofday() renvoie l'heure avec une précision de l'ordre de la microseconde.

1 votes

Spécifiquement GAWK, non ? Je l'ai essayé sur un AWK normal, et ça a échoué.

2voto

Lyncean Patel Points 460

Je veux générer une valeur à partir de bash et utiliser cette valeur dans le code Java pour la reconvertir en date (java.util).

La commande suivante fonctionne pour moi pour générer la valeur dans le fichier bash :

date +%s000

1 votes

Bien. Je recommande que nous n'utilisions pas java.util.Date mais Cette classe est mal conçue et dépassée depuis longtemps. Utilisez plutôt Instant de java.time, l'API moderne de date et d'heure de Java . Il vous suffit alors date %+s dans bash et Instant.ofEpochSecond() en Java.

0voto

Xopi García Points 111

A imprimer secondes décimales :

start=$(($(date +%s%N)/1000000)) \
    && sleep 2 \
    && end=$(($(date +%s%N)/1000000)) \
    && runtime=$((end - start))

divisor=1000 \
    && foo=$(printf "%s.%s" $(( runtime / divisor )) $(( runtime % divisor ))) \
    && printf "runtime %s\n" $foo # in bash integer cannot cast to float

Sortie : runtime 2.3

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