Продолжительность расчета, когда у вас есть часы, минуты, секунды и миллисекунды

StackOverflow https://stackoverflow.com/questions/6316401

Вопрос

Я пишу программу в Фортране, и мне нужен способ расчета продолжительности программы до миллисекундов. Я использовал функцию «date_and_time», которая оставляет у меня массив, содержащий время системы, минуты, секунд и миллисекунд.

Я считаю, что я могу назвать эту функцию в начале моей программы для хранения текущего времени, а затем снова позвонить в функцию в конце моей программы, чтобы хранить последний раз. Но после этого, как бы я компьютерл продолжительность? Я попытался просто вычитать значения, но миллисекунд сбрасываются, когда одна секунда проходит, как и секунды, сброс, когда проходит одна минута. Как будет лучший способ подойти к этому?

Вот программа:

       PROGRAM TEST_TIME_AND_DATE
          INTEGER I
          REAL J
          INTEGER TIME_A(8), TIME_B(8)
          CALL DATE_AND_TIME(VALUES=TIME_A)
          PRINT '(8I5))', TIME_A
          DO I = 0, 400000000
            J = I * I - J
          END DO
          CALL DATE_AND_TIME(VALUES=TIME_B)
          print '(8I5))', TIME_B
      END PROGRAM TEST_TIME_AND_DATE

И вот результат:

2011    6   11 -300    9   14   49  304
2011    6   11 -300    9   14   50  688

Я не уверен, что здесь делать, спасибо.

Это было полезно?

Решение

Вы можете вычесть числа, затем преобразовать все в миллисекунд и суммировать MS, SEC в MS, MIN в MS, HRS в MS, ...

В вашем случае это будет

0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]

Этот подход отлично работает также с переполнением, поскольку положительное число в левом столбце переворачивает отрицательные числа, если все они преобразуются на одну и ту же основу. Например 0:58.000 к 1:02.200 доходность

1 * 60000 + (-56) * 1000 + 200 = 4200

Обратите внимание, что это работает до нескольких дней, но не в течение нескольких месяцев, так как они не разделяют общую длину.

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

Если вы хотите истекать время с часами, было бы проще использовать внутреннюю процедуру System_clock, поскольку он обеспечивает единый выходной сигнал. (Существуют дополнительные аргументы для предоставления информации о процедуре, поэтому это процедура вместо функции.) См., Например,, например, http://gcc.gnu.org/onlinedocs/gfortran/system_005fclock.html. Анкет Если вы хотите использовать процессор, используйте CPU_TIME. Для любого двух вызовов, в начале и в конце программы, затем простой разница. Вы можете использовать аргумент count_rate для преобразования в целое число времени в секунды.

Вы можете рассчитать смещение с некоторого времени начала (1 января 1970 года для UNIX) за считанные секунды или миллисекунды. Разница в этих числах - ваше прошедшее время.

(2011 - 1970) * (number of seconds in a year) +
(month of the year - 1) * (number of seconds in a month) +
(day of the month - 1) * (number of seconds in a day) + 
( ... )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top