tl; dr
Java 9 e posterior: Resolução de até nanossegundos ao capturar o momento atual. São 9 dígitos da fração decimal.
Instant.now()
23-12-2017T12: 34: 56.123456789Z
Para limitar a microssegundos , trunque .
Instant // Represent a moment in UTC.
.now() // Capture the current moment. Returns a `Instant` object.
.truncatedTo( // Lop off the finer part of this moment.
ChronoUnit.MICROS // Granularity to which we are truncating.
) // Returns another `Instant` object rather than changing the original, per the immutable objects pattern.
23-12-2017T12: 34: 56.123456Z
Na prática, você verá apenas microssegundos capturados com .now
relógios convencionais de hardware de computador contemporâneos que não são precisos em nanossegundos .
Detalhes
As outras respostas estão um tanto desatualizadas no Java 8.
java.time
Java 8 e posterior vem com a estrutura java.time . Essas novas classes substituem as classes problemáticas e problemáticas de data e hora enviadas com as versões mais antigas do Java, como java.util.Date/.Calendar e java.text.SimpleDateFormat. O framework é definido pela JSR 310, inspirado no Joda-Time , estendido pelo projeto ThreeTen-Extra.
As classes em java.time resolvem em nanossegundos , muito mais precisos do que os milissegundos usados pelas antigas classes de data e hora e pelo Joda-Time. E mais fino do que os microssegundos perguntados na pergunta.
Clock
Implementação
Embora as classes java.time suportem dados que representam valores em nanossegundos, as classes ainda não geram valores em nanossegundos. Os now()
métodos usam a mesma implementação de relógio antigo que as classes de data e hora antigas System.currentTimeMillis()
. Temos a nova Clock
interface em java.time, mas a implementação dessa interface é o mesmo relógio de milissegundos antigo.
Portanto, você pode formatar a representação textual do resultado de ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
para ver nove dígitos de uma fração de segundo, mas apenas os três primeiros dígitos terão números como este:
2017-12-23T12:34:56.789000000Z
Novo relógio em Java 9
As implementações OpenJDK e Oracle do Java 9 têm uma nova Clock
implementação padrão com granularidade mais fina, até a capacidade total de nanossegundos das classes java.time.
Consulte o problema do OpenJDK, Aumente a precisão da implementação de java.time.Clock.systemUTC () . Esse problema foi implementado com sucesso.
2017-12-23T12:34:56.123456789Z
Em um MacBook Pro (Retina, 15 polegadas, final de 2013) com macOS Sierra, obtenho o momento atual em microssegundos (até seis dígitos da fração decimal).
2017-12-23T12:34:56.123456Z
Relógio de Hardware
Lembre-se de que, mesmo com uma nova Clock
implementação mais precisa, seus resultados podem variar de acordo com o computador. Java depende do relógio do hardware do computador para saber o momento atual.
- A resolução dos relógios de hardware variam amplamente. Por exemplo, se o relógio de hardware de um determinado computador suportar apenas granularidade de microssegundos , quaisquer valores de data e hora gerados terão apenas seis dígitos de frações de segundo, com os três últimos dígitos sendo zeros.
- A precisão dos relógios de hardware varia amplamente. Só porque um relógio gera um valor com vários dígitos da fração decimal de um segundo, esses dígitos podem ser imprecisos, apenas aproximações, à deriva do tempo real como podem ser lidos de um relógio atômico . Em outras palavras, só porque você vê um monte de dígitos à direita da marca decimal não significa que você pode confiar que o tempo decorrido entre essas leituras será verdadeiro para aquele grau de minuto.