Использование java.time
FYI, Java 9 и более поздние версии имеют новую реализацию Clock
, которая может фиксировать текущий момент с разрешением до наносекунд.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичного знака доля).
Позвоните Instant.now
, чтобы зафиксировать текущий момент.
- В Java 9 и более поздних версиях вы получаете разрешение до наносекунд на данный момент.
В Java 8 текущий момент фиксируется только с разрешением миллисекунд (вы действительно можете хранить значения с наносекундами, но только захватывать текущий момент в миллисекундах).
Мгновенное мгновение = Instant.now ();
Представляет промежуток времени, не привязанный к временной шкале с классом Duration
. Содержит количество времени в секундах и наносекундах.
Duration d = Duration.between( instantThen , Instant.now() );
Для ясности, разрешение микросекунд , заданное в Вопросе, находится между гранулярностями миллисекунд и наносекунд. Число знаков после запятой: миллис равен 3 (0,123), микро - 6 (0,123456), нанос - 9 (0,123456789).
* * Тысяча сорок-девять * 1050 Caveat *
Java использует аппаратные часы вашего компьютера. Как и другие предупреждали, аппаратное обеспечение почти наверняка будет фиксировать время с гораздо меньшей точностью и гораздо меньшим разрешением , чем наносекундами.
Бенчмаркинг при такой тонкой детализации чреват проблемами и вообще не рекомендуется вообще.
И остерегайтесь преждевременной оптимизации .
Существует предложение о добавлении средства микро-бенчмаркинга для платформы Java в JEP 230: Microbenchmark Suite . На основе Java Microbenchmark Harness (JMH) .
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
- Java SE 8 и SE 9 и более поздние
- Встроенный.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time перенесена в Java 6 & 7 в ThreeTen-Backport .
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .