计算小时,分钟,秒和毫秒时的持续时间

时间:2011-06-11 14:18:00

标签: datetime math timer fortran milliseconds

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

我不知道该怎么做,谢谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您可以减去数字,然后将所有内容转换为毫秒,并总结ms,ms(毫秒),分钟(毫秒),小时(毫秒),......

在你的情况下,这将是

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

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

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

请注意,由于它们没有共同的长度,因此最多可以使用数天而不是几个月。

答案 2 :(得分:0)

您可以在几秒或几毫秒内计算某些开始时间(1970年1月1日,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) + 
( ... )