Вычисление длительности, когда у вас есть часы, минуты, секунды и миллисекунды - PullRequest
0 голосов
/ 11 июня 2011

Я пишу программу на Фортране, и мне нужен способ вычисления продолжительности программы до миллисекунд. Я использовал функцию "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

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

Ответы [ 3 ]

2 голосов
/ 11 июня 2011

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

0 голосов
/ 11 июня 2011

Вы можете рассчитать смещение от некоторого начального времени (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) + 
( ... )
0 голосов
/ 11 июня 2011

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

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

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

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

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

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

...