tl; dr
Chiedete la frazione di secondo del tempo corrente come numero di millisecondi ( non conteggiati dall'epoca).
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
25/04/2017 T03: 01: 14.113Z → 113
- Ottieni il secondo frazionario in nanosecondi (miliardi).
- Dividi per mille per troncare in millisecondi (migliaia).
Vedi questo codice eseguito dal vivo su IdeOne.com .
Utilizzando java.time
Il modo moderno è con le classi java.time.
Cattura il momento attuale in UTC.
Instant.now()
Utilizzare il Instant.get
metodo per interrogare per il valore di a TemporalField
. Nel nostro caso, ciò TemporalField
che vogliamo è ChronoField.MILLI_OF_SECOND
.
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
O fai la matematica da solo.
Più probabilmente lo stai chiedendo per un fuso orario specifico. È probabile che la frazione di secondo sia la stessa di Instant
ma ci sono così tante anomalie con i fusi orari, esito a fare questa ipotesi.
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
Interroga per il secondo frazionario. La domanda ha richiesto millisecondi , ma le classi java.time usano una risoluzione più fine di nanosecondi . Ciò significa che il numero di nanosecondi sarà compreso tra 0 e 999.999.999.
long nanosFractionOfSecond = zdt.getNano();
Se vuoi veramente millisecondi, tronca i dati più fini dividendoli per un milione. Ad esempio, mezzo secondo è 500.000.000 di nanosecondi e anche 500 millisecondi.
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
Informazioni su java.time
Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date
, Calendar
, e SimpleDateFormat
.
Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione alle classi java.time .
Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .
Dove ottenere le classi java.time?
Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
e altro .
[0, 999]
, giusto? @thinksteep ha letto l'ultima frase.