getMilliseconds () fuera de Java Fecha
-
13-10-2019 - |
Pregunta
necesito una función como getMillis larga (Fecha unaFecha);
que devuelve los milisegundos de la segunda fecha. No puedo usar Yoda, SimpleDateFormat u otras bibliotecas porque es código de GWT.
Mi solución actual está haciendo date.getTime() % 1000
¿Hay una mejor manera?
Solución
Como se señaló por Peter Lawrey, en general, se necesita algo como
int n = (int) (date.getTime() % 1000);
return n<0 ? n+1000 : n;
ya que las obras %
en una forma "extraña" en Java. Lo llamo extraña, como siempre necesito el resultado de caer en un rango determinado (en este caso: 0..999), más que a veces la obtención de resultados negativos. Por desgracia, funciona de esta manera en la mayoría de las CPU y la mayoría de los idiomas, por lo que tenemos que vivir con ello.
Otros consejos
Probado arriba y tiene un comportamiento inesperado hasta que use el mod con 1000 como una larga.
int n = (int) (date.getTime() % 1000l);
return n<0 ? n+1000 : n;
tl; dr
aDate.toInstant()
.toEpochMilli()
java.time
Los usos enfoque moderno java.time clases. Estos suplantar a las viejas clases heredadas molestos como java.util.Date
.
Instant instant = Instant.now(); // Capture current moment in UTC.
Extracto de su cuenta de milisegundos desde la época de 1970-01-01T00:00:00Z
.
long millis = instant.toEpochMilli() ;
conversión
Si pasa un objeto java.util.Date
, convertir a java.time. Llame a nuevos métodos añadidos a las antiguas clases.
Instant instant = myJavaUtilDate.toInstant() ;
long millis = instant.toEpochMilli() ;