tl; dr
Java 9 ve üstü: Geçerli anı yakalarken nanosaniye kadar çözünürlük. Bu 9 basamaklı ondalık kesir.
Instant.now()
2017-12-23T12: 34: 56.123456789Z
İçin sınırlamak için mikrosaniye , kesiğinin .
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.
2017-12-23T12: 34: 56.123456Z
Pratikte, .nowçağdaş geleneksel bilgisayar donanım saatleri nanosaniye cinsinden doğru olmadığından , yalnızca mikrosaniyelerin yakalandığını göreceksiniz .
Detaylar
Diğer Cevaplar Java 8'den itibaren biraz eskidir.
java.time
Java 8 ve üzeri, java.time çerçevesiyle birlikte gelir . Bu yeni sınıflar, java.util.Date/.Calendar ve java.text.SimpleDateFormat gibi Java'nın en eski sürümleriyle birlikte gönderilen hatalı, sorunlu tarih-saat sınıflarının yerini alıyor. Çerçeve, Joda-Time'dan esinlenerek , ThreeTen-Extra projesi tarafından genişletilen JSR 310 tarafından tanımlanmıştır .
Java.time içindeki sınıflar, hem eski tarih-saat sınıfları hem de Joda-Time tarafından kullanılan milisaniyeden çok daha ince olan nanosaniyelere çözümlenir . Ve Soru'da sorulan mikrosaniyeden daha ince .

Clock Uygulama
Java.time sınıfları destek verisi nanosaniye değerleri temsil ederken, sınıflar henüz yok üretmek nanosaniye değerleri. now()Yöntemleri, eski tarih-saat sınıfları aynı tarihi saat uygulamasını kullanabilirsiniz System.currentTimeMillis(). ClockJava.time'da yeni arayüzümüz var, ancak bu arayüz için uygulama aynı eski milisaniye saatidir.
Böylece ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ), kesirli bir saniyenin dokuz basamağını görmek için sonucun metinsel temsilini biçimlendirebilirsiniz, ancak yalnızca ilk üç basamak aşağıdaki gibi sayılara sahip olacaktır:
2017-12-23T12:34:56.789000000Z
Java 9'da Yeni Saat
Java 9'un OpenJDK ve Oracle uygulamaları Clock, java.time sınıflarının tam nanosaniye kapasitesine kadar daha ince ayrıntı düzeyine sahip yeni bir varsayılan uygulamaya sahiptir.
OpenJDK sorununa bakın, java.time.Clock.systemUTC () uygulamasının kesinliğini artırın . Bu sorun başarıyla uygulandı.
2017-12-23T12:34:56.123456789Z
MacOS Sierra yüklü bir MacBook Pro'da (Retina, 15 inç, 2013 Sonu), şu anki anı mikrosaniye cinsinden (altı haneye kadar ondalık kesir) alıyorum.
2017-12-23T12:34:56.123456Z
Donanım Saati
Daha ince bir Clockuygulamayla bile sonuçlarınızın bilgisayara göre değişebileceğini unutmayın. Java, mevcut anı bilmek için temel bilgisayar donanımının saatine bağlıdır.
- Çözünürlük donanım saatlerinin büyük farklılıklar gösterir. Örneğin, belirli bir bilgisayarın donanım saati yalnızca mikrosaniye ayrıntı düzeyini destekliyorsa , üretilen herhangi bir tarih-saat değeri, son üç basamak sıfır olmak üzere yalnızca altı basamaklı kesirli saniyeye sahip olacaktır.
- Doğruluk donanım saatlerin geniş çapta değişebilir. Bir saat, saniyenin birkaç basamaklı ondalık kesirine sahip bir değer ürettiği için, bu basamaklar yanlış olabilir, sadece tahminler, atomik bir saatten okunabileceği gibi gerçek zamandan sapma olabilir . Diğer bir deyişle, ondalık işaretin sağında bir dizi rakam görüyor olmanız, bu tür okumalar arasında geçen süreye o dakika derecesine kadar güvenebileceğiniz anlamına gelmez.