Java 8 Instant.now () avec une résolution de nanoseconde?
Java 8 de java.temps.Instantanée dans les magasins de "l'ordre de la nanoseconde résolution", mais à l'aide d'Instant.maintenant() ne fournit milliseconde...
Instant instant = Instant.now();
System.out.println(instant);
System.out.println(instant.getNano());
Résultat...
2013-12-19T18:22:39.639Z
639000000
Comment puis-je obtenir un Instantané dont la valeur est "maintenant", mais avec une résolution d'une?
source d'informationauteur user1615355
Vous devez vous connecter pour publier un commentaire.
Tout défaut Java8 horloge ne fournit pas de nanosecondes résolution, vous pouvez les combiner avec Java capacité à mesurer différences de temps avec nanosecondes de résolution, ainsi la création d'un réel de l'ordre de la nanoseconde-capable d'horloge.
Son utilisation est simple: il suffit de fournir paramètre supplémentaire à l'Instant.maintenant(), ou l'appel de l'Horloge.instantanée() directement:
Bien que cette solution peut fonctionner même si vous re-créer NanoClock les instances de tous les temps, il est toujours préférable de s'en tenir à un stockées horloge initialisé au début de votre code, puis utilisé partout où il est nécessaire.
Vous pouvez vous considérer comme chanceux si vous obtenez la même milliseconde.
Instant
peut modèle le temps d'une précision à la nanoseconde, mais la vraie vie de l'équipement sur votre ordinateur qui suit l'horloge murale a généralement autour de la résolution de 10 ms, et la précision presque certainement un peu en dessous (100 ms serait une hypothèse optimiste).De le comparer avec
System.nanoTime()
ce qui donne à la résolution de quelques microsecondes, mais ne donne pas absolue sur l'horloge murale. Clairement, il y a déjà un compromis au travail pour vous donner ce genre de résolution, encore trois ordres de grandeur à court de nanosecondes.Vous ne pouvez obtenir un Instantané de "nanosecondes" en utilisant un autre plus précis java.temps.Horloge en utilisant l'Instantanée de la méthode
public static Instant now(Clock clock)
Dans votre exemple, la valeur par défaut de l'horloge utilise normalement le Système.currentTimeMillis() qui ne peut pas afficher toutes les nanosecondes.Être conscient qu'il n'y a pas d'horloge disponibles dans l'ordre de la nanoseconde résolution (en temps réel). L'intérieur de la nanoseconde à la représentation installation de java.temps.Instantanée est principalement due à l'exigence de la carte de base de données horodateurs donné dans une précision à la nanoseconde (mais normalement pas de précision à la nanoseconde!).
Mise à jour de 2015-12-29: Java-9 fournit une meilleure horloge, voir mon dernier message.
J'ai donc passé un certain temps à creuser par le biais de la Javadoc ici:
http://download.java.net/jdk8/docs/api/java/time/Instant.html
Il semble que vous devriez être en mesure de faire ce qui suit:
Que dit l'autre answerers faire un bon point qu'il va être puissant difficile d'obtenir une précision de nano-seconde de temps que les ordinateurs n'ont généralement pas la capacité de suivre le temps pour que la résolution