Продолжительность расчета, когда у вас есть часы, минуты, секунды и миллисекунды
-
26-10-2019 - |
Вопрос
Я пишу программу в Фортране, и мне нужен способ расчета продолжительности программы до миллисекундов. Я использовал функцию «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) +
( ... )