tl; dr
Você pede a fração de segundo do tempo atual como um número de milissegundos ( sem contar da época).
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03: 01: 14.113Z → 113
- Obtenha o segundo fracionário em nanossegundos (bilhões).
- Divida por mil para truncar em milissegundos (milhares).
Veja este código executado ao vivo em IdeOne.com .
Usando java.time
A maneira moderna é com as classes java.time.
Capture o momento atual no UTC.
Instant.now()
Use o Instant.get
método para interrogar o valor de a TemporalField
. No nosso caso, o TemporalField
que queremos é ChronoField.MILLI_OF_SECOND
.
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
Ou faça as contas você mesmo.
É mais provável que você esteja solicitando um fuso horário específico. É provável que a fração de segundo seja igual à de Instant
mas há tantas anomalias com fusos horários que hesito em fazer essa suposição.
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
Interrogar pelo segundo fracionário. A pergunta fazia milissegundos , mas as classes java.time usam uma resolução mais fina de nanossegundos . Isso significa que o número de nanossegundos variará de 0 a 999.999.999.
long nanosFractionOfSecond = zdt.getNano();
Se você realmente deseja milissegundos, trunque os dados mais finos dividindo por um milhão. Por exemplo, meio segundo é 500.000.000 nanossegundos e também é 500 milissegundos.
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como java.util.Date
, Calendar
, e SimpleDateFormat
.
O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time .
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Onde obter as classes java.time?
- Java SE 8 e SE 9 e posterior
- Construídas em.
- Parte da API Java padrão com uma implementação em pacote configurável.
- O Java 9 adiciona alguns recursos e correções menores.
- Java SE 6 e SE 7
- Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport .
- Android
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como Interval
, YearWeek
, YearQuarter
, e mais .
[0, 999]
, correto? @thinksteep leu a última frase.