当您有小时、分钟、秒和毫秒时计算持续时间



我正在用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

我不知道在这里该怎么办,谢谢。

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

您可以减去数字,然后将所有内容转换为毫秒,并将毫秒、秒、分钟、小时、…相加。。。

在你的情况下,这将是

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

这种方法也适用于溢出,因为如果负数都转换为相同的基,则左多列中的正数会超过负数。例如0:58.0001:02.200产生

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

请注意,这确实适用于天,但不适用于月,因为它们没有共同的长度。

您可以计算从某个开始时间(对于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) + 
( ... )

相关内容

  • 没有找到相关文章

最新更新