Как использовать Instant Class в Java, чтобы получить прошедшее время в секундах до определенного количества десятичных знаков?

Есть ли способ использовать класс Instant в Java, чтобы получить прошедшее время в секундах до определенного количества десятичных знаков? Мне потребовалось некоторое время, чтобы поэкспериментировать, и я смог использовать метод .now() в двух отдельных точках программы и вычесть их, чтобы получить затраченное время. Однако моя проблема заключалась в том, что я не мог довести секунды до определенного количества десятичных знаков.

Что значит «не удалось довести секунды до определенного количества десятичных знаков»? С какой конкретной проблемой вы столкнулись?

Sweeper 10.07.2024 08:13

Итак, вы хотите представить прошедший промежуток времени в виде дробного числа секунд? Если да, отредактируйте свой вопрос, чтобы выразить это более четко.

Basil Bourque 10.07.2024 08:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если у вас есть два экземпляра 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);

Другие вопросы по теме