tl; dr
Vous demandez la fraction de seconde de l'heure actuelle en nombre de millisecondes ( sans compter à partir de l'époque).
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03: 01: 14.113Z → 113
- Obtenez la fraction de seconde en nanosecondes (milliards).
- Divisez par mille pour tronquer en millisecondes (milliers).
Voir ce code exécuté en direct sur IdeOne.com .
Utilisation de java.time
La manière moderne est d'utiliser les classes java.time.
Capturez le moment actuel en UTC.
Instant.now()
Utilisez la Instant.get
méthode pour rechercher la valeur de a TemporalField
. Dans notre cas, ce que TemporalField
nous voulons est ChronoField.MILLI_OF_SECOND
.
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
Ou faites le calcul vous-même.
Il est plus probable que vous le demandiez pour un fuseau horaire spécifique. La fraction de seconde est probablement la même qu'avec Instant
mais il y a tellement d'anomalies avec les fuseaux horaires, j'hésite à faire cette hypothèse.
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
Interrogez pendant la fraction de seconde. La question demandait des millisecondes , mais les classes java.time utilisent une résolution plus fine de nanosecondes . Cela signifie que le nombre de nanosecondes va de 0 à 999 999 999.
long nanosFractionOfSecond = zdt.getNano();
Si vous voulez vraiment des millisecondes, tronquez les données les plus fines en les divisant par un million. Par exemple, une demi-seconde équivaut à 500 000 000 nanosecondes et également à 500 millisecondes.
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que java.util.Date
, Calendar
, et SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes java.time?
- Java SE 8 et SE 9 et versions ultérieures
- Intégré.
- Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6 et SE 7
- Une grande partie de la fonctionnalité java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels futurs ajouts à java.time. Vous trouverez peut - être des classes utiles ici, comme Interval
, YearWeek
, YearQuarter
et plus .
[0, 999]
, n'est-ce pas? @thinksteep a lu la dernière phrase.