getMilliseconds () su Java Data
-
13-10-2019 - |
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?
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() ;