Какой новый метод получить текущее время с точностью в микросекундах в Java сейчас?

Я проверил нижеприведенную страницу о том, что нет способа получить текущее время с точностью в микросекундах на Java в 2009 году.
Текущее время в микросекундах в java

Самый лучший из них - System.currentTimeMillis(), который дает текущее время с точностью в миллисекундах, а System.nanoTime() дает текущую временную метку с точностью в наносекундах, но эта временная метка не может быть использована для преобразования в текущее время с высоким точность.

Могу ли я узнать, есть ли новое обновление для Java через 6 лет? Спасибо.

Изменить 1. System.nanoTime() полезен для оценки продолжительности, но не дает текущего времени.

Изменить 2. Хорошо иметь решения в Java 8. Есть ли другой способ сделать это в Java 7? Спасибо!

Ответ 1

TL;DR

Instant.now()

2018-03-09T21: 03: 33.831515Z

Используя Java 9 и более поздние версии, вы можете перенести текущий момент микросекунды.

Пример, описанный выше, - это Oracle Java 9.0.4 для macOS Sierra. Обратите внимание на 6 цифр дробной секунды, то есть на микросекунды.


java.time

Структура java.time, встроенная в Java 8 и более поздняя, ​​имеет классы для представления значений даты и времени с разрешением nanoseconds, 9 цифр десятичной доли секунды.

Java 9

Java 9 имеет свежую реализацию Clock с точностью до наносекунд. Фактические значения зависят от пределов базовых аппаратных часов любого конкретного компьютера.

Для получения дополнительной информации см. вопрос, Почему новый Java 8 Time Time API не имеет наносекундной точности?.

Избегайте старых классов времени. Классы, такие как java.util.Date/.Calendar в комплекте с ранними версиями Java, имеют только миллисекундное разрешение. То же самое для Joda-Time. Оба они вытесняются классами java.time.

Java 8

Java 8 реализует интерфейс Clock только с millisecond (3 цифры дробной секунды). Поэтому, когда классы java.time способны переносить наносекунды, он не способен фиксировать текущее время с помощью наносекунд.

Исходный код

Возможно, вы могли бы написать или найти реализацию Clock, которая вызывает вызов собственной библиотеки в ОС хоста, чтобы получить более точное время.

База данных

Если вы уже используете базу данных, вы можете задать ее на время. Начиная с JDBC 4.2 и более поздних версий, вы можете напрямую обменивать java.time-объекты с вашей базой данных.

Instant instant = myPreparedStatement.getObject( … , Instant.class ) ;

До JDBC 4.2 вы можете пройти через неприятное наследие java.sql.Timestamp, которое несет наносекундное разрешение. Например, Postgres предоставляет microsecond (при условии, что часы компьютера-хоста поддерживают это), 6 цифр дробной секунды. Вы можете конвертировать из java.sql.Timestamp в Instant и ZonedDateTime с использованием новых методов, добавленных в старые классы.

введите описание изображения здесь


О java.time

Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятный старый legacy классы даты-времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.

Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.

Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или новее, Нет необходимости в строках, нет необходимости в классах java.sql.*.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time обратно переносится на Java 6 и 7 в ThreeTen-Backport.
  • Android
    • Более поздние версии реализаций пакетов Android классов java.time.
    • Для более ранних Android (< 26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше), См. Как использовать ThreeTenABP....

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и больше.

Ответ 2

В пакете Java 8 java.time есть то, что вам нужно.

Try:

LocalDateTime.now().getLong(ChronoField.MICRO_OF_SECOND);
LocalDateTime.now().getLong(ChronoField.NANO_OF_SECOND); // even finer
LocalDateTime.now().getDayOfMonth(); // main parts of the date have their own methods
LocalDateTime.now().getMonth(); // etc  

Чтобы просто набрать nos как строку, используйте nnnnnnnnn в формате:

LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.nnnnnnnnn"));  

Ответ 3

Еще один способ получить текущее время от нового Java 8 java.time - это Clock class

Clock.systemUTC().millis()

дает текущее время в миллисекундах (длительное значение миллиса с эпохи) или

Clock.systemUTC().instant()

возвращает экземпляр Instant class ", который представляет начало наносекунды на временной шкале" в соответствии с официальный учебник Oracle Java. В учебном пособии показано, как работать с новым классом, конвертировать в локальный или UTC или время зонирования и т.д.