Как получить микросекунды с даты? - PullRequest
2 голосов
/ 06 января 2012

Я пытаюсь получить микросекунды от Date, но не могу.

Date date = new Date()

Ответы [ 3 ]

16 голосов
/ 06 января 2012

Нет, Date сохраняет значения только с точностью до миллисекунды. Если вам нужна микросекундная точность, вы можете посмотреть на JSR-310 или java.sql.Timestamp как на хакерство, но не ожидайте ничего из встроенного -в классах, таких как Calendar и DateFormat, для обработки чего-либо за пределами миллисекунд.

Если вы пытаетесь выполнить хронометраж (например, для бенчмаркинга), вы должны использовать System.nanoTime, но для секундомера следует использовать only как и случаи использования - не не дает значимого значения «текущего времени настенного часа».

2 голосов
/ 06 января 2012

Что я делаю, так это нахожу разницу между currentTimeMillis и nanoTime () через равные промежутки времени (так как это немного смещается) и использую nanoTime () + OFFSET для currentTimeNS.(Для большей детализации я использую инструкцию машинного кода RDTSC, которая поставляется с еще большим количеством придирок;)

Однако она менее точна, чем currentTimeMillis (), со временем, которая сама может дрейфовать на многие миллисекунды в час.

Это действительно полезно, только если вы понимаете его ограничения.

1 голос
/ 06 января 2012

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

Для пользователя это действует почти так же, как System.currentTimeMilis () для миллисекунд, вы просто определяете время начала и окончания, а затем сводите на нет разницу, чтобы узнать, сколько времени заняло действие. Например:

long startTime = System.nanoTime();
//Do some kind of processing; 
//loop, IO, whatever you want to measure
long endTime = System.nanoTime();
long elapsedTime = endTime - startTime;

Последний бит может быть закорочен, для простоты я оставил его подробным:

long elapsedTime = System.nanoTime() - startTime;

Это не должно использоваться для измерения реального времени, поскольку оно имеет очень мало значения или гарантирует, что оно даже сравнимо с ним. Вся вышеупомянутая информация доступна из документации API Java для System .

...