Ответ 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
и больше.