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?

¿Fue útil?

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() ;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top