0

我正在用 Fortran 编写一个程序,我需要一种将程序持续时间计算到毫秒的方法。我一直在使用函数“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

我不知道在这里做什么,谢谢。

4

3 回答 3

2

如果您想要经过的时钟时间,使用内部过程 system_clock 会更简单,因为它提供单个时间值输出。(有额外的参数来提供关于过程的信息,这就是为什么它是一个过程而不是一个函数。)例如,参见http://gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.html。如果要计时 CPU 使用率,请使用 cpu_time。对于任何一个,两个调用,在程序的开始和结束,然后是一个简单的区别。您可以使用 COUNT_RATE 参数将整数时间转换为秒。

于 2011-06-11T16:20:49.430 回答
0

您可以以秒或毫秒为单位计算从某个开始时间(UNIX 为 1970 年 1 月 1 日)开始的偏移量。这些数字的差异是您经过的时间。

(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) + 
( ... )
于 2011-06-11T16:51:54.110 回答
0

您可以减去这些数字,然后将所有内容转换为毫秒,然后总结 ms、ms 中的 sec、ms 中的 min、ms 中的 hrs ......

在你的情况下,这将是

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

这种方法也适用于溢出,因为如果左侧列中的正数都转换为相同的基数,则它们的权重会超过负数。例如0:58.000收益1:02.200

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

请注意,这在几天内有效,但在几个月内无效,因为它们没有共同的长度。

于 2011-06-11T14:22:18.010 回答