Remarque, je ne veux PAS de millis d'époque. Je veux le nombre de millisecondes actuellement sur l'horloge.
Donc, par exemple, j'ai ce bout de code.
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
Existe-t-il un moyen d'obtenir des millisecondes avec la date? Y a-t-il une autre façon de faire cela?
Remarque: System.currentTimeMillis()
me donne des millis d'époque ce qui n'est pas ce que je recherche.
java
date
time
milliseconds
Lemonio
la source
la source
[0, 999]
, n'est-ce pas? @thinksteep a lu la dernière phrase.java.util.Date
maintenant héritées , supplantées par les classes java.time .java.util.Date
maintenant héritées , supplantées par les classes java.time . Voir le didacticiel d'Oracle .Réponses:
Tu veux dire?
BTW Windows n'autorise pas le voyage dans le temps jusqu'en 1969
la source
c.get(Calendar.MILLISECOND)
ne devrait pas. Pensez toujours aux valises d'angle!System.currentTimeMillis()
n'est pas affecté par les fuseaux horaires.Utiliser le calendrier
ou
En pratique, je pense que cela équivaudra presque toujours à System.currentTimeMillis ()% 1000; à moins que quelqu'un ait des millisecondes bissextiles ou qu'un calendrier soit défini avec une époque et non sur une seconde frontière.
la source
la source
tl; dr
Vous demandez la fraction de seconde de l'heure actuelle en nombre de millisecondes ( sans compter à partir de l'époque).
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.
Utilisez la
Instant.get
méthode pour rechercher la valeur de aTemporalField
. Dans notre cas, ce queTemporalField
nous voulons estChronoField.MILLI_OF_SECOND
.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.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.
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.
À 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
, etSimpleDateFormat
.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?
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 .la source
J'ai essayé quelques-uns ci-dessus mais ils semblent réinitialiser @ 1000
Celui-ci fonctionne définitivement et devrait également prendre en compte l'année
puis faites de même pour l'heure de la fin si nécessaire.
la source
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
la source
Joda-Time
Je pense que vous pouvez utiliser Joda-Time pour ce faire. Jetez un œil à la
DateTime
classe et à sagetMillisOfSecond
méthode. Quelque chose commela source
getMillis()
a un accès protégé"; besoin d'utiliser à laget()
place. Notez également que celanew DateTime(new Date())
équivaut à écrire simplementnew DateTime()
.millisOfSecond
accède à un objet et l'appel ultérieur àget
extrait une primitiveint
de cet objet. Vous pouvez réduire les deux appels en utilisant la méthode getter de commodité,getMillisOfSecond
. Joda-Time suit ce modèle pour plusieurs de ses propriétés.Dans Java 8, vous pouvez simplement faire
la source
Instant.now().toEpochMilli()
J'ai fait le test en utilisant java 8 Peu importe l'ordre que le constructeur prend toujours 0 millisecondes et le concat entre 26 et 33 millisecondes sous et itération d'une concaténation de 1000
J'espère que cela aidera à l'essayer avec votre idée
la source
Java 8:
la source
LocalDateTime
classe ne peut pas représenter un moment, sans aucun concept de fuseau horaire ou de décalage par rapport à UTC, et ne peut donc pas suivre ces problèmes de fuseau horaire.Vous pouvez utiliser la classe java.util.Calendar pour obtenir l'heure en millisecondes. Exemple:
la source