Comment obtenir l'heure actuelle d'Unix en millisecondes (c'est-à-dire le nombre de millisecondes depuis l'époque Unix le 1er janvier 1970)?
232
date +%s
retournera le nombre de secondes depuis l'époque.
date +%s%N
renvoie les secondes et les nanosecondes actuelles.
date +%s%N | cut -b1-13
vous donnera le nombre de millisecondes écoulées depuis l'époque - secondes actuelles plus les trois nanosecondes à gauche.
et de MikeyB - echo $(($(date +%s%N)/1000000))
(diviser par 1000 ne rapporte qu’en microsecondes)
echo $(($(date +%s%N)/1000))
Vous pouvez simplement utiliser
%3N
pour tronquer les nanosecondes aux 3 chiffres les plus significatifs (qui sont alors des millisecondes):Cela fonctionne par exemple sur mon kubuntu 12.04.
Sachez toutefois que cela
%N
peut ne pas être mis en œuvre en fonction de votre système cible. Par exemple, testé sur un système intégré (rootrois de la racine, compilé à l’aide d’une chaîne d’outils croisés de bras non-HF), il n’existait pas de%N
:(Et aussi ma tablette Android (non enracinée) n'a pas
%N
).la source
1397392146%3N
pour1397392146%N
, mais la sortie1397392146%3N
est que ce que je vraiment vu sur la console busybox de ma tablette Android. Pourriez-vous expliquer votre édition?date +%s.%3N
impressions1510718281.134
.date +%N
ne fonctionne pas sous OS X, mais vous pouvez utiliser l'un desruby -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
la source
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Il suffit de jeter cela dehors, mais je pense que la formule correcte avec la division serait:
la source
Ma solution n'est pas la meilleure mais a fonctionné pour moi.
date +%s000
Je devais juste convertir une date comme le 2012-05-05 en millisecondes.
la source
Pour les personnes qui suggèrent d’exécuter des programmes externes pour obtenir les millisecondes ... à ce rythme, vous pouvez tout aussi bien faire ceci:
Le point étant: avant de choisir une réponse, gardez à l’esprit que tous les programmes ne fonctionneront pas en une seconde. Mesure!
la source
date
prend 3 ms.cette solution fonctionne sur macOS.
Si vous envisagez d'utiliser un script bash et que vous disposez de python, vous pouvez utiliser ce code:
la source
Si vous recherchez un moyen d'afficher la durée d'exécution de votre script, les résultats suivants fourniront un résultat (pas tout à fait exact):
Au début de votre script, entrez les informations suivantes:
basetime=$(date +%s%N)
Cela vous donnera une valeur de départ de quelque chose comme 1361802943996000000
À la fin de votre script, utilisez ce qui suit
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
qui affichera quelque chose comme
runtime: 12.383 seconds
Remarques:
(1 * 10 ^ 09) peut être remplacé par 1000000000 si vous le souhaitez
"scale=3"
est un paramètre plutôt rare qui obligebc
à faire ce que vous voulez. Il y en a beaucoup plus!Je n'ai testé cela que sur Win7 / MinGW ... Je n'ai pas de boîte * nix appropriée à portée de main.
la source
time <script>
Voici comment obtenir le temps en millisecondes sans effectuer de division. Peut-être que c'est plus rapide ...
Mise à jour: une autre alternative de pure bash qui fonctionne uniquement avec
bash 4.2+
est identique à celle ci-dessus mais utiliseprintf
pour obtenir la date. Ce sera certainement plus rapide car aucun processus n'est dérivé du processus principal.Une autre prise ici est que si votre
strftime
mise en œuvre devrait soutenir%s
et%N
qui est pas le cas sur ma machine de test. Voirman strftime
pour les options supportées. Voir aussiman bash
pour voir laprintf
syntaxe.-1
et-2
sont des valeurs spéciales pour le temps.la source
strftime(3)
ne supporte pas,%N
donc aucun moyenprintf
d’imprimer des nanosecondes. J'utilise Ubuntu 14.04.date
semble être l'option la plus fiable.L’horodatage le plus précis que nous puissions obtenir (du moins pour Mac OS X) est probablement le suivant:
Mais il ne faut pas oublier qu'il faut environ 30 millisecondes pour fonctionner. Nous pouvons le réduire à l’échelle de la fraction de 2 chiffres, et tout au début calculer l’aide moyenne due à la lecture de l’heure, puis l’éliminer de la mesure. Voici un exemple:
Vous pouvez décommenter les commandes echo pour mieux voir comment cela fonctionne.
Les résultats de ce script sont généralement l'un de ces 3 résultats:
la source
Utiliser date et expr peut vous y amener c'est-à-dire
Développez-le pour faire ce que vous voulez
Je me rends bien compte que cela ne donne pas des millisecondes depuis l’époque, mais que cela peut toujours être utile comme réponse à certains cas, tout dépend de ce dont vous avez réellement besoin, multipliez par 1000 si vous avez besoin d’un nombre en millisecondes: D
Le moyen le plus simple serait de créer un petit exécutable (à partir de C f.ex.) et de le rendre disponible pour le script.
la source
date
plusieurs fois. Dans certains cas, la date ou l'heure peuvent changer entre les exécutions au fur et à mesure que votre commande est écrite. Il est préférable d'exécuterdate
une fois et analyser les parties et faire votre calcul. Une des manières de le faire seraitt=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. Ceci utilise la syntaxe Bash puisque la question est étiquetée bash . Comme vous le dites, votre réponse (et ma variante) ne donne que quelques secondes pour la journée en cours jusqu'à présent et non depuis l’époque et non en millis.(répéter ci-dessus)
date +%N
ne fonctionne pas sous OS X, mais vous pouvez aussi utiliser:Perl (nécessite le module Time :: Format). Peut-être pas le meilleur module CPAN à utiliser mais fait le travail. Time :: Format est généralement mis à disposition avec les distributions.
la source
date
ne peut pas être utilisé et il n'y a pas de commandes uniquement bash qui répondent au besoin.date
peut pas être utilisé dans votre réponse , je supprimerais mon vote négatif.Rassembler toutes les réponses précédentes, lorsque sous OSX
tu peux faire comme
la source
Si vous voulez un calcul simple shell écoulé, c'est facile et portable, en utilisant la réponse ci-dessus:
la source
Pour linux alpin (beaucoup d’images de docker) et éventuellement d’autres environnements Linux minimaux, vous pouvez abuser
adjtimex
:adjtimex
est utilisé pour lire (et définir) les variables de temps du noyau. Avecawk
vous pouvez obtenir les microsecondes, avechead
vous ne pouvez utiliser que les 3 premiers chiffres.Je n'ai aucune idée de la fiabilité de cette commande.
Remarque: volé sans vergogne de cette réponse
la source