тл; д-р
Java 9 і пізніших версій: До наносекунд, роздільна здатність під час захоплення поточного моменту. Це 9 цифр десяткового дробу.
Instant.now()
2017-12-23T12: 34: 56.123456789Z
Щоб обмежитися мікросекундами , усікайте .
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
На практиці ви побачите лише мікросекунди, захоплені, .now
оскільки сучасні звичайні годинники апаратних засобів комп’ютера не є точними в наносекундах .
Деталі
Інші відповіді дещо застаріли в порівнянні з Java 8.
java.time
Java 8 і пізніші версії поставляються з java.time . Ці нові класи витісняють хибні клопітні класи часу та часу, що постачаються з найстарішими версіями Java, такими як java.util.Date/.Calendar та java.text.SimpleDateFormat. Рамки визначені JSR 310, натхненний Joda-Time , розширений проектом ThreeTen-Extra.
Класи java.time дорівнюють наносекундам , набагато тоншим, ніж мілісекунди, що використовуються як старими класами дати, так і Joda-Time. І тонше, ніж мікросекунди, задані у Питання.
Clock
Впровадження
Хоча класи java.time підтримують дані, що представляють значення в наносекундах, класи ще не генерують значення в наносекундах. Ці now()
методи використовують ту ж саму стару реалізацію годин , як і старі класи дати і час, System.currentTimeMillis()
. У нас є новеClock
інтерфейс в java.time, але реалізація для цього інтерфейсу - це той самий старий годинник мілісекунд.
Таким чином, ви можете відформатувати текстове зображення результату, ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
щоб побачити дев'ять цифр дробової секунди, але тільки перші три цифри матимуть такі цифри:
2017-12-23T12:34:56.789000000Z
Новий годинник на Java 9
Реалізації OpenJDK та Oracle Java 9 мають новий за замовчуванням Clock
реалізацію з більш тонкою деталізацією, аж до повної наносекундної можливості класів java.time.
Дивіться випуск OpenJDK, Підвищити точність впровадження java.time.Clock.systemUTC () . Це питання успішно реалізовано.
2017-12-23T12:34:56.123456789Z
На MacBook Pro (Retina, 15-дюймовий, кінець 2013 року) з macOS Sierra, я отримую поточний момент в мікросекундах (до шести цифр десяткового дробу).
2017-12-23T12:34:56.123456Z
Апаратний годинник
Пам'ятайте, що навіть при новій більш точній Clock
реалізації, ваші результати можуть залежати від комп'ютера. Java залежить від основного годинника апаратного забезпечення комп'ютера, щоб знати поточний момент.
- Дозвіл апаратних годин змінюватися в широких межах. Наприклад, якщо апаратний годинник конкретного комп'ютера підтримує лише мікросекунди деталізацію , будь-які згенеровані значення дати матимуть лише шість цифр дробової секунди, а останні три цифри - нулі.
- Точність апаратних годин змінюватися в широких межах. Тільки тому, що годинник генерує значення з кількох цифр десяткового дробу секунди, ці цифри можуть бути неточними, лише наближеннями, даними від фактичного часу, як це може бути прочитано з атомного годинника . Іншими словами, те, що ви бачите купу цифр праворуч від десяткової позначки, не означає, що ви можете довіряти минулому часу між такими показаннями, що відповідає справжній хвилині.