Domanda

Ho bisogno di una funzione come lungo getMillis (Data aDate);

che restituisce i millisecondi dalla Data di secondo. Non posso usare Yoda, SimpleDateFormat o altre librerie perché è il codice GWT.

La mia soluzione attuale sta facendo date.getTime() % 1000

C'è un modo migliore?

È stato utile?

Soluzione

Come sottolineato da Peter Lawrey, in generale, avete bisogno di qualcosa come

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

in quanto opere % in modo "strano" in Java. Io lo chiamo strano, come ho sempre bisogno il risultato di cadere in un determinato intervallo (qui: 0..999), piuttosto che a volte ottenendo risultati negativi. Purtroppo, funziona in questo modo in più CPU e la maggior parte delle lingue, quindi dobbiamo vivere con esso.

Altri suggerimenti

Provato sopra e ha un comportamento imprevisto fino a quando ho usato il mod con 1000 come un lungo.

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

tl; dr

aDate.toInstant()
     .toEpochMilli()

java.time

I moderni usi approccio java.time classi. Questi soppiantare le classi legacy vecchi problematici, come java.util.Date.

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

Estrai il valore di millisecondi dal momento che all'epoca della 1970-01-01T00:00:00Z.

long millis = instant.toEpochMilli() ;

La conversione

Se si sta passato un oggetto java.util.Date, convertire in java.time. Chiamare nuovi metodi aggiunti alle vecchie classi.

Instant instant = myJavaUtilDate.toInstant() ;
long millis = instant.toEpochMilli() ;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top