Есть ли способ использовать класс Instant
в Java, чтобы получить прошедшее время в секундах до определенного количества десятичных знаков? Мне потребовалось некоторое время, чтобы поэкспериментировать, и я смог использовать метод .now()
в двух отдельных точках программы и вычесть их, чтобы получить затраченное время. Однако моя проблема заключалась в том, что я не мог довести секунды до определенного количества десятичных знаков.
Итак, вы хотите представить прошедший промежуток времени в виде дробного числа секунд? Если да, отредактируйте свой вопрос, чтобы выразить это более четко.
Если у вас есть два экземпляра Instant
, вы можете найти продолжительность между ними в любой выбранной вами хронологической единице.
Для вашего конкретного случая использования, поскольку количество необходимых десятичных знаков не указано, вероятно, проще всего получить количество наносекунд (это дает вам наивысшую точность), разделите это число на 1e+9
(количество наносекунд в секунду ), а затем округлите и/или отформатируйте до нужного вам количества десятичных знаков.
import static java.time.temporal.ChronoUnit.NANOS;
import java.time.Instant;
class Test {
public static void main(String[] args) throws InterruptedException {
Instant start = Instant.now();
Thread.sleep(320);
Instant end = Instant.now();
long nanos = NANOS.between(start, end);
double seconds = (double) nanos / 1e9;
System.out.println(String.format("%,.4f seconds", seconds));
}
}
Это генерирует вывод, подобный следующему:
0.3202 seconds
Вы можете использовать truncatedTo
.
public static void main(String[] args) throws InterruptedException {
Instant start = Instant.now().truncatedTo(ChronoUnit.SECONDS);
// code being timed
Instant end = Instant.now().truncatedTo(ChronoUnit.SECONDS);
Duration duration = Duration.between(start, end);
Вы также можете использовать Clock.tickSeconds(ZoneId)
:
public static void main(String[] args) throws InterruptedException {
Clock clock = Clock.tickSeconds(ZoneId.systemDefault());
Instant start = Instant.now(clock);
// code being timed
Instant end = Instant.now(clock);
Duration duration = Duration.between(start, end);
Что значит «не удалось довести секунды до определенного количества десятичных знаков»? С какой конкретной проблемой вы столкнулись?