ТЛ; др
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
Подробнее
Остальные ответы несколько устарели с Java 8.
java.time
Java 8 и более поздние версии поставляются с java.time framework. Эти новые классы вытесняют дефектные и проблемные классы даты и времени, поставляемые с самыми ранними версиями 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
Реализации Java 9 в OpenJDK и Oracle имеют новую реализацию по умолчанию 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 зависит от часов аппаратного обеспечения компьютера, чтобы знать текущий момент.
- Разрешение аппаратных часов сильно различается. Например, если аппаратные часы конкретного компьютера поддерживают только микросекунды гранулярность, любые сгенерированные значения даты и времени будут иметь только шесть цифр доли секунды с последними тремя цифрами, являющимися нулями.
- Точность аппаратных часов сильно различается. Просто потому, что часы генерируют значение с несколькими цифрами десятичной доли секунды, эти цифры могут быть неточными, только приблизительными, отклоненными от фактического времени, как это может быть считано с атомных часов . Другими словами, то, что вы видите группу цифр справа от десятичной отметки, не означает, что вы можете доверять истекшему времени между такими показаниями, чтобы оно соответствовало этой минутной степени.