Question

Je besoin d'une fonction comme à long getMillis (date laDate);

qui renvoie les millisecondes de la date seconde. Je ne peux pas utiliser Yoda, SimpleDateFormat ou d'autres bibliothèques parce que son code GWT.

Ma solution actuelle fait date.getTime() % 1000

Y at-il une meilleure façon?

Était-ce utile?

La solution

Comme l'a souligné Peter Lawrey, en général vous avez besoin quelque chose comme

int n = (int) (date.getTime() % 1000);
return n<0 ? n+1000 : n;

depuis les travaux de % d'une manière « étrange » en Java. Je l'appelle étrange, comme je l'ai toujours besoin le résultat de tomber dans une plage donnée (ici: 0..999), plutôt que d'obtenir des résultats parfois des négatifs. Malheureusement, il fonctionne de cette façon dans la plupart des processeurs et la plupart des langues, donc nous devons vivre avec.

Autres conseils

Essayé ci-dessus et a eu un comportement inattendu jusqu'à ce que je le mod avec 1000 comme une longue.

int n = (int) (date.getTime() % 1000l);
return n<0 ? n+1000 : n;

tl; dr

aDate.toInstant()
     .toEpochMilli()

java.time

L'approche moderne utilise java.time classes. Ces classes supplanter les anciens vieux gênants tels que java.util.Date.

Instant instant = Instant.now();  // Capture current moment in UTC.

Extraire votre nombre de millisecondes depuis l'époque de 1970-01-01T00:00:00Z.

long millis = instant.toEpochMilli() ;

Conversion

Si vous passé un objet java.util.Date, convertir en java.time. Appel de nouvelles méthodes ajoutées aux anciennes classes.

Instant instant = myJavaUtilDate.toInstant() ;
long millis = instant.toEpochMilli() ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top