tl; dr
Java 9 dan lebih baru: Resolusi hingga nanodetik saat menangkap momen saat ini. Itu berarti 9 digit pecahan desimal.
Instant.now()
2017-12-23T12: 34: 56.123456789Z
Untuk membatasi ke mikrodetik , potong .
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
Dalam praktiknya, Anda hanya akan melihat mikrodetik yang ditangkap .now
karena jam perangkat keras komputer konvensional kontemporer tidak akurat dalam nanodetik .
Detail
Jawaban lainnya agak ketinggalan jaman pada Java 8.
java.time
Java 8 dan yang lebih baru hadir dengan framework java.time . Class baru ini menggantikan class date-time bermasalah yang dikirimkan dengan versi Java paling awal seperti java.util.Date/.Calendar dan java.text.SimpleDateFormat. Kerangka kerja ditentukan oleh JSR 310, terinspirasi oleh Joda-Time , diperpanjang oleh proyek ThreeTen-Extra.
Kelas-kelas di java.time menyelesaikan nanodetik , jauh lebih halus daripada milidetik yang digunakan oleh kelas tanggal-waktu lama dan oleh Joda-Time. Dan lebih baik dari mikrodetik yang ditanyakan dalam Pertanyaan.
Clock
Penerapan
Sementara kelas java.time mendukung data yang merepresentasikan nilai dalam nanodetik, kelas tersebut belum menghasilkan nilai dalam nanodetik. The now()
metode menggunakan implementasi clock yang sama tuanya dengan kelas tanggal-waktu lama, System.currentTimeMillis()
. Kami memiliki Clock
antarmuka baru di java.time tetapi implementasi untuk antarmuka itu adalah jam milidetik lama yang sama.
Jadi Anda dapat memformat representasi tekstual dari hasil ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
untuk melihat sembilan digit pecahan detik tetapi hanya tiga digit pertama yang memiliki angka seperti ini:
2017-12-23T12:34:56.789000000Z
Jam Baru Di Jawa 9
Implementasi OpenJDK dan Oracle dari Java 9 memiliki Clock
implementasi default baru dengan perincian yang lebih baik, hingga kemampuan nanodetik penuh dari kelas java.time.
Lihat masalah OpenJDK, Meningkatkan presisi implementasi java.time.Clock.systemUTC () . Masalah itu telah berhasil diterapkan.
2017-12-23T12:34:56.123456789Z
Di MacBook Pro (Retina, 15 inci, Akhir 2013) dengan macOS Sierra, saya mendapatkan momen saat ini dalam mikrodetik (hingga enam digit pecahan desimal).
2017-12-23T12:34:56.123456Z
Jam Perangkat Keras
Ingatlah bahwa meskipun dengan Clock
penerapan baru yang lebih baik , hasil Anda mungkin berbeda menurut komputer. Java bergantung pada jam perangkat keras komputer yang mendasari untuk mengetahui momen saat ini.
- The resolusi dari jam hardware bervariasi. Misalnya, jika jam perangkat keras komputer tertentu hanya mendukung perincian mikrodetik , nilai tanggal-waktu yang dihasilkan hanya akan memiliki enam digit pecahan detik dengan tiga digit terakhir adalah nol.
- The akurasi dari jam hardware bervariasi. Hanya karena sebuah jam menghasilkan nilai dengan beberapa digit pecahan desimal dalam satu detik, angka tersebut mungkin tidak akurat, hanya perkiraan, terpaut dari waktu aktual seperti yang mungkin dibaca dari jam atom . Dengan kata lain, hanya karena Anda melihat sekelompok angka di sebelah kanan tanda desimal tidak berarti Anda dapat mempercayai waktu yang berlalu antara pembacaan tersebut dengan benar hingga derajat menit tersebut.