Le dateprogramme sous OS X est différent du dateprogramme coreutils de GNU . Vous pouvez installer coreutils (y compris gnu-date), vous aurez alors une version datequi prend en charge les millisecondes.
Comme l’installation à partir des sources peut être compliquée pour les utilisateurs OS X natifs, je vous conseille d’utiliser Homebrew .
Pour installer ces outils à l’aide de Homebrew, exécutez cette oneliner sur votre terminal:
Homebrew est maintenant installé (il est sage de suivre les suggestions de l'installateur après l'installation). Nous allons maintenant 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, gnn, 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:
Agréable. Je n'ai même pas eu à ajouter le chemin, a gdateété installé dans /usr/local/bin/gdate.
Adam Matan
C'est ce que vous attendez. Tous les fichiers 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 datedevient GNU date(au lieu de gdate)
CousinCocaine
Bien que cela a fonctionné.
CousinCocaine
3
Techniquement, le +%s.%Nformat donne les secondes avec une précision de l'ordre de la nanoseconde, pas des millisecondes. Après avoir utilisé le brassage pour l’installer gdate, j’ai vérifié la page de manuel pour savoir si le millisecondes était disponible. Ce n'est pas. Il n’a pas non plus précisé qu’une précision %Npouvait être spécifiée, mais j’ai essayé quand même. J'ai trouvé que la commande pour obtenir les secondes avec une précision à la milliseconde seulement (c'est-à-dire trois décimales) est gdate +%s.%3N.
LS
10
Sous OS X, le simple fait de s’exécuter date +%ssous OS X ne prend pas en charge une plus grande précision que datela sortie de ce dernier, et toute précision excédentaire non prise en charge par la représentation interne est tronquée à l’infini.
Si vous souhaitez 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 les raisons susmentionnées. Ce qui suit génère des millisecondes correctes sur des systèmes prenant en charge la précision nécessaire.
OS X ne prend pas en charge %-N, donc cela ne fait rien (et pourrait causer des problèmes si la variable shell $Nest définie). Utilisez simplement date +%s000(ou date +%s.000si vous voulez le point décimal).
Gordon Davisson
@ Gordon Oui, je l'ai mentionné, mais si OP recherche une solution portable qui fonctionne avec succès sur des systèmes capables de cette précision, la commande ci-dessus fonctionne. Bien sûr, vous pouvez simplement ajouter des zéros à la sortie, mais la copier sur d’autres systèmes prenant en charge la précision supplémentaire ne serait pas idéale.
grg
Ah, je vois. Mais comme la datecommande d' OS X ne fait que passer %-Nau fur et à mesure N, elle 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épendait pas de l'environnement.
Gordon Davisson
@Gordon En effet, définir la variable la briserait - je suppose que la variable spécifique pourrait être réinitialisée juste avant que la commande ne soit exécutée, mais la réinitialisation de variables comme celle-ci est une chose que tout bon script devrait faire avant d'exécuter des commandes quand même, imo, juste au cas où. Bien sûr, tout cela est basé sur l'hypothèse que le PO veut un script - la réponse modifiée doit inclure l'ajout littéral de zéros.
grg
2
L'OP a demandé "le temps depuis l'époque, en millisecondes", c'est une réponse sur la façon d'ajouter des zéros à une chaîne. Pas le même. Bien que expliqué dans le post, pas une réponse à la question.
CousinCocaine
6
cette solution fonctionne sur macOS.
Si vous envisagez d'utiliser un script bash et que vous disposez de python, vous pouvez utiliser le code suivant:
gdate
été installé dans/usr/local/bin/gdate
.date
devient GNUdate
(au lieu de gdate)+%s.%N
format donne les secondes avec une précision de l'ordre de la nanoseconde, pas des millisecondes. Après avoir utilisé le brassage pour l’installergdate
, j’ai vérifié la page de manuel pour savoir si le millisecondes était disponible. Ce n'est pas. Il n’a pas non plus précisé qu’une précision%N
pouvait être spécifiée, mais j’ai essayé quand même. J'ai trouvé que la commande pour obtenir les secondes avec une précision à la milliseconde seulement (c'est-à-dire trois décimales) estgdate +%s.%3N
.Sous OS X, le simple fait de s’exécuter
date +%s
sous OS X ne prend pas en charge une plus grande précision quedate
la sortie de ce dernier, et toute précision excédentaire non prise en charge par la représentation interne est tronquée à l’infini.Si vous souhaitez 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 les raisons susmentionnées. Ce qui suit génère des millisecondes correctes sur des systèmes prenant en charge la précision nécessaire.
Source pour la commande ci-dessus: Unix.SE - Comment obtenir des millisecondes depuis l’époque Unix
Si vous voulez juste une commande qui ajoute le bon nombre de zéros dans OS X, vous pouvez utiliser:
la source
%-N
, donc cela ne fait rien (et pourrait causer des problèmes si la variable shell$N
est définie). Utilisez simplementdate +%s000
(oudate +%s.000
si vous voulez le point décimal).date
commande d' OS X ne fait que passer%-N
au fur et à mesureN
, elle peut interférer avec le calcul. Essayez de réglerN=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épendait pas de l'environnement.cette solution fonctionne sur macOS.
Si vous envisagez d'utiliser un script bash et que vous disposez de python, vous pouvez utiliser le code suivant:
Ou écrivez un
python
script directement:la source
Perl est omniprésent.
la source