Конвертировать Мгновенно в микросекунды из времени эпохи
В Instant
Есть методы:
toEpochMilli
который преобразует этот момент в число миллисекунд с эпохи 1970-01-01T00:00:00ZgetEpochSecond
который получает количество секунд из эпохи Java 1970-01-01T00:00:00Z.
Оба эти метода теряют точность, например, в toEpochMilli
JavaDoc я вижу:
Если этот момент имеет точность, превышающую миллисекунду, то при преобразовании отбрасывается любая информация о избыточной точности, как если бы количество в наносекундах было целочисленным делением на миллион.
Я не вижу соответствующих методов для получения более точной метки времени. Как я могу получить количество микро или нанос из эпохи в Java 8?
1 ответ
Использование getNano()
вместе с getEpochSeconds()
,
int getNano()
Получает число наносекунд, позднее по временной шкале, от начала секунды. Значение наносекунды секунды измеряет общее количество наносекунд от секунды, возвращенной
getEpochSecond
,
Преобразовать в желаемую единицу с TimeUnit
, как говорится в комментарии:
Instant inst = Instant.now();
// Nano seconds since epoch, may overflow
long nanos = TimeUnit.SECONDS.toNanos(inst.getEpochSecond()) + inst.getNano();
// Microseconds since epoch, may overflow
long micros = TimeUnit.SECONDS.toMicros(inst.getEpochSecond()) + TimeUnit.NANOSECONDS.toMicros(inst.getNano());
Вы также можете узнать, когда они переполнены:
// 2262-04-11T23:47:16.854775807Z
Instant.ofEpochSecond(TimeUnit.NANOSECONDS.toSeconds(Long.MAX_VALUE),
Long.MAX_VALUE % TimeUnit.SECONDS.toNanos(1));
// +294247-01-10T04:00:54.775807Z
Instant.ofEpochSecond(TimeUnit.MICROSECONDS.toSeconds(Long.MAX_VALUE),
TimeUnit.MICROSECONDS.toNanos(Long.MAX_VALUE % TimeUnit.SECONDS.toMicros(1)))
Как часть java.time, в java.time.temporal.ChronoUnit есть единицы, которые полезны для получения разницы между двумя точками во времени как числа практически в любой единице, которую вы пожелаете. например
import java.time.Instant;
import java.time.temporal.ChronoUnit;
ChronoUnit.MICROS.between(Instant.EPOCH, Instant.now())
дает микросекунды с эпохи для этого Мгновенного как долго.